跑步:
SELECT CONVERT(VARCHAR(20), GETDATE(), 100)将产生以下结果:
Jan 4 2012 1:25PM我已经知道这件事很多年了。
然而,昨天,当我开车的时候,我心里想:
嘿!我给了他103格式的日期时间格式, 但我并没有告诉转换程序,我也传递了一个datetime对象!(例如getdate())
所以我试过:
SELECT CONVERT(VARCHAR(20), 'lalala', 100)结果是:
lalala因此,现在我试图通过datetime格式(103)将'lalala‘转换成字符串。
这(从逻辑上说)应该给我一个例外。
但事实并非如此。
有合理的解释吗?
发布于 2012-01-04 12:26:08
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/datetime。
参考资料:
发布于 2012-01-04 11:42:26
转换函数只使用第三个参数(style),如果第二个参数(data_to_be_converted)是datetime。
如果它已经是varchar,那么它就是returns值,什么都不要做。
发布于 2012-01-04 11:48:40
转换的MSDN文档说样式参数是根据传递的值的类型来解释的,所以我猜它会检查值,并能判断它是哪种类型。
例如,注意'1‘的样式意味着日期时间的"mm/dd/yy“和浮点值的”总是8位数。始终在科学符号中使用“。
https://stackoverflow.com/questions/8726106
复制相似问题