Jac*_*ack 7 sql-server-2008 sql-server date-format type-conversion
建议使用哪个 SQL 命令将日期转换为yyyymmdd
格式?
convert(varchar(8), getdate(), 112);
或者convert(varchar, getdate(), 112)
我注意到如果我使用第二个,它会在日期后附加两个空格。(例如 [ 20130705
] - 注意值后面的两个空格20130705
)
是否建议使用第一个 SQL 语句?
Raj*_*Raj 16
默认情况下,如MSDN 中所述,如果没有为 varchar 指定长度,则在使用 CAST 或 CONVERT 时将默认为 30,在声明为变量时将默认为 1。
为了演示,试试这个:
DECLARE @WithLength varchar(3),@WithoutLength varchar;
SET @WithLength = '123';
SET @WithoutLength = '123';
SELECT @WithLength,@WithoutLength
Run Code Online (Sandbox Code Playgroud)
这是非常危险的,因为 SQL Server 会悄悄地截断该值,甚至没有警告,并且可能导致意外错误。
但是,在给定的场景中,涉及到有问题的主题,无论有没有长度,这两个语句之间没有任何区别,我无法看到您正在谈论的 2 个尾随空格。尝试这个:
SELECT CONVERT(varchar(8), GETDATE(), 112)
UNION ALL
SELECT DATALENGTH(CONVERT(varchar(8), GETDATE(), 112))
UNION ALL
SELECT CONVERT(varchar, GETDATE(), 112)
UNION ALL
SELECT DATALENGTH(CONVERT(varchar, GETDATE(), 112))
Run Code Online (Sandbox Code Playgroud)
您会注意到该DATALENGTH()
函数在两种情况下都返回 8。
拉吉