Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 sql转换忽略格式?_Sql Server 2005 - Fatal编程技术网

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
,但这可能超出了问题或答案的范围。