【发布时间】:2012-03-20 05:02:59
【问题描述】:
我们有一个旧的 SQL 表,它被 SQL Server 2000 使用了将近 10 年。
在其中,我们的员工徽章编号存储为char(6),从000001 到999999。
我现在正在编写一个 Web 应用程序,我需要存储员工徽章编号。
在我的新表中,我可以走捷径并复制旧表,但我希望通过简单地将 int 值从 1 存储到 999999 来实现更好的数据传输、更小的大小等.
在 C# 中,我可以使用以下方法快速格式化 int 的徽章编号值
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。
【问题讨论】:
-
既然前导
0s 对这个领域很重要,为什么要把它改成INT呢? -
SQL Server 2012最终将拥有类似 C# 的
FORMAT函数 :-) -
@Oden:
int值占用的空间比char(6)少得多,而且每个制造的零件都会有多个这样的条目。效率。 -
您是否在遇到问题之前进行了优化?
-
让我们看看,您有多达 100 万个徽章编号,并且您认为每个可以保存(根据
DATALENGTH())两个字节。由于该列可能在索引中,因此您可以节省超过 2MB。再加上其他列,这 2 个字节可能足以减少行的长度,足以每行节省 4KB 的页面。这将托管在移动平台上,还是您可能将注意力集中在非生产性领域?
标签: sql sql-server tsql string-formatting