Sql server 2005 sql转换忽略格式?
运行:Sql server 2005 sql转换忽略格式?,sql-server-2005,Sql Server 2005,运行: SELECT CONVERT(VARCHAR(20), GETDATE(), 100) 将导致: Jan 4 2012 1:25PM 我已经知道这些年了 然而,昨天,当我开车时,我想: 嘿!我给了他103的格式,是日期时间格式 但我并没有告诉皈依者我也在传递约会时间 对象(例如getdate()) 所以我试着: SELECT CONVERT(VARCHAR(20), 'lalala', 100) 结果是: lalala 所以,现在我试图通过datetime格式(103)将'l
SELECT CONVERT(VARCHAR(20), GETDATE(), 100)
将导致:
Jan 4 2012 1:25PM
我已经知道这些年了
然而,昨天,当我开车时,我想:
嘿!我给了他103的格式,是日期时间格式
但我并没有告诉皈依者我也在传递约会时间
对象(例如getdate())
所以我试着:
SELECT CONVERT(VARCHAR(20), 'lalala', 100)
结果是:
lalala
所以,现在我试图通过datetime格式(103)将'lalala'转换为字符串
这(从逻辑上)应该给我一个例外
但事实并非如此
有什么合理的解释吗?如果第二个参数(数据要转换
)是日期时间
,则只使用第三个参数(样式
)
如果它已经是varchar
它返回值并且不做任何事情。如果第二个参数(要转换的数据
)是日期时间
,则只使用第三个参数(样式
)
如果它已经是varchar
它返回值并且不做任何事情。说样式参数是根据传递的值的类型来解释的-所以我猜它会检查值并判断它是哪种类型
例如,请注意,样式“1”表示日期时间的“mm/dd/yy”,表示浮点值的“始终为8位。始终使用科学记数法”。表示,样式参数是根据传递的值的类型进行解释的,因此我猜它会检查值,并可以判断它是哪种类型
例如,请注意,样式“1”表示日期时间为“mm/dd/yy”,表示浮点值为“始终为8位。始终使用科学记数法”。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
参考:
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
参考:
很有趣。那么,如果它既不是varchar,也不是datetime,会发生什么呢?实际上,当表达式是float
,real
,money
,smallmoney
,xml
或binary
varbinary
,但这可能超出了问题或答案的范围。那么,如果它既不是varchar也不是datetime,会发生什么呢?实际上,当表达式是float
,real
,money
,smallmoney
,xml
或binary
varbinary
,但这可能超出了问题或答案的范围。