跑步:
SELECT CONVERT(VARCHAR(20), GETDATE(), 100)
将导致:
Jan 4 2012 1:25PM
多年来我一直都知道这一点。
然而,昨天,在我开车的时候,我想到了自己:
喂!我给了他格式103,这是日期时间格式,
但我实际上并没有告诉我也通过日期时间的转换 对象! (例如getdate()))
所以我试过了:
SELECT CONVERT(VARCHAR(20), 'lalala', 100)
结果是:
lalala
所以,现在我试图通过日期时间格式(103)将'lalala'转换为字符串。
(按逻辑)应该给我例外。
但事实并非如此。
有任何合理的解释吗?
答案 0 :(得分:1)
CONVERT
考虑目标类型和表达式类型,以查看是否应该考虑第三个参数。如果要将日期时间转换为字符串或反之,则考虑第三个参数。在您的示例中,字符串将转换为字符串,因此忽略第三个参数。
考虑一下:
SELECT 1, CONVERT(datetime, '03/01/2011', 103)
SELECT 2, CONVERT(datetime, '03/01/2011', 101)
SELECT 3, CONVERT(varchar, '03/01/2011', 103)
SELECT 4, CONVERT(varchar, '03/01/2011', 101)
结果如下:
--- -----------------------
1 2011-01-03 00:00:00.000
--- -----------------------
2 2011-03-01 00:00:00.000
--- ------------------------------
3 03/01/2011
--- ------------------------------
4 03/01/2011
正如您所看到的,最后两次“转化”并没有改变任何内容,因为源代码和目标类型都是varchar
,即使表达式看起来像date
/ { {1}}。
参考:
答案 1 :(得分:0)
如果第二个参数(style
)为data_to_be_converted
,则convert function仅使用第三个参数(datetime
)。
如果已经varchar
它returns
值,则不做任何事情。
答案 2 :(得分:0)
The MSDN documentation for CONVERT表示style参数是根据传递的值的类型解释的 - 所以我猜它会检查值并且可以判断它是哪种类型。
例如,请注意,对于浮动值,样式“1”表示日期时间为“mm / dd / yy”,“始终为8位数。始终以科学计数法使用”。