查看包含某人的SSN的最后4个的列,该列最初是作为int数据类型创建的。现在,以0开头的SSN在数据库中注册为0。
如何将列及其信息从int转换为字符串以供将来证明?
答案 0 :(得分:1)
您应该转换。 CONVERT(VARCHAR(4), your_col)
答案 1 :(得分:1)
如果您特别想要填充零的数字,那么最简单的解决方案是format()
:
select format(123, '0000')
如果要修复表格,请执行以下操作:
alter table t alter column ssn4 char(4); -- there are always four digits
然后更新值以获取前导零:
update t
ssn4 = format(convert(int, ssn4), '0000');
或者,如果仅希望下游用户拥有该字符串,则可以使用计算列:
alter table t
add ssn4_str as (format(ssn4, '0000'));
答案 2 :(得分:0)
如果要添加前导零,请使用:
SELECT RIGHT('0000'+ISNULL(SSN,''),4)
答案 3 :(得分:0)
第一件事永远不要将SSN或邮政编码存储为任何数字类型。 其次,您应该修复基础表结构,而不要依赖于转换...但是,如果遇到麻烦,这是一个可以帮助您的case语句示例。
IF OBJECT_ID('tempdb..#t') IS NOT NULL
BEGIN
DROP TABLE #t
END
GO
CREATE TABLE #t(
LastFourSSN INT
)
INSERT INTO #t(LastFourSSN)
VALUES('0123'),('1234')
SELECT LastFourSSN --strips leading zero
FROM #t
SELECT -- adds leading zero to anything less than four charaters
CASE
WHEN LEN(LastFourSSN) < 4
THEN '0' + CAST(LastFourSSN AS VARCHAR(3))
ELSE CAST(LastFourSSN AS VARCHAR(4))
END LastFourSSN
FROM #t
答案 4 :(得分:0)
如果要在列中转换值以供在应用程序中使用,可以使用以下命令-
SELECT CAST(your_column AS VARCHAR(100))
--VARCHAR length based on your data
但是,如果您要直接查找数据库列的更改数据类型,则可以尝试以下操作-
ALTER TABLE TableName
ALTER COLUMN your_column VARCHAR(200) NULL
--NULL or NOT NULL based on the data already stored in database