我们有一个SQL Server 2000使用了近10年的旧SQL表.

在其中,我们的员工徽章编号存储为char(6),从000001999999.

我现在正在编写一个web应用程序,我需要存储员工徽章号码.

在我的新表中,我可以走捷径,复制旧表,但我希望通过简单地存储1999999之间的int个值,实现更好的数据传输、更小的大小等.

在C#中,我可以使用

public static string GetBadgeString(int badgeNum) {
  return string.Format("{0:000000}", badgeNum);
  // alternate
  // return string.Format("{0:d6}", badgeNum);
}

我该如何修改这个简单的SQL查询来设置返回值的格式?

SELECT EmployeeID
FROM dbo.RequestItems
WHERE ID=0

如果EmployeeID是7135,这个查询应该返回007135.

推荐答案

将数字6更改为总长度所需的长度:

SELECT REPLICATE('0',6-LEN(EmployeeId)) + EmployeeId

如果列是INT,则可以使用RTRIM将其隐式转换为VARCHAR

SELECT REPLICATE('0',6-LEN(RTRIM(EmployeeId))) + RTRIM(EmployeeId)

以及删除这些0并获取"真实"数字的代码:

SELECT RIGHT(EmployeeId,(LEN(EmployeeId) - PATINDEX('%[^0]%',EmployeeId)) + 1)

Sql相关问答推荐

从snowflake中的表格中删除一个完全重复的副本

Oracle SQL对列进行汇总并在列表底部显示总计

Microsoft Access UNION将长文本字段限制为255个字符

获取每个帖子的匹配关键字列表

BigQuery-当子查询不返回任何结果时,所有结果为零

是否可以为表中的所有列生成散列值?

将结果从一列转换为两行或更多

HAVING子句内部过滤的正确方法

IF NOT EXISTS子查询的性能瓶颈

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

用于从第二个表中提取具有最小最终价格值的记录的SQL查询

数据库SQL PARSE_SYNTAX_ERROR

当active=1时,是否可以创建id为的唯一索引?

根据具有特定值的 ID 创建自定义组

SQL Server 查询 WHERE LIKE

具有分组条件的不同计数 (DAX)

在SQL中实现表格数据透视类型报表

强制 SQL 始终通过 R 从视图中返回至少一行

使用标准SQL 触发更新当前日期

将单行中的多个行值转换为列