sql Server 中时间值一样 可是得到的结果不一样 why
A:select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
B:select substring(convert(varchar(20),GETDATE(),112),1,6)
C:select GETDATE()
A:select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
B:select substring(convert(varchar(20),GETDATE(),112),1,6)
C:select GETDATE()
select convert(varchar(20),GETDATE(),112)
/*
--------------------
2010-03-03 15:54:27.(1 行受影响)
--------------------
20100303(1 行受影响)
*/
select substring(convert(varchar(20),GETDATE(),120),1,6)
select GETDATE()--
--------------
--2010-0
--
--(1 行受影响)
--
--
--------------
--2010-0
--
--(1 行受影响)
--
--
-------------------------
--2010-03-03 16:18:27.100
--
--(1 行受影响)
select convert(varchar(20),'2010-03-03 15:54:27.073',112)
select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
select convert(varchar(20),GETDATE(),112)
select substring(convert(varchar(20),GETDATE(),112),1,6)
select GETDATE()
'2010-03-03 15:54:27.073',--此时系统把它当做字符串,后面的就参数不起作用
112
)select convert(varchar(20),'2010-03-03 15:54:27.073',112)
select convert(varchar(20),'2010-03-03 15:54:27.073',120)
select convert(varchar(20),'2010-03-03 15:54:27.073',113)
/*--------------------
2010-03-03 15:54:27.(1 行受影响)
--------------------
2010-03-03 15:54:27.(1 行受影响)
--------------------
2010-03-03 15:54:27.(1 行受影响)
*/
select substring(convert(varchar(20),GETDATE(),112),1,6)
select GETDATE()/*------------
201003(1 行受影响)
------------
201003(1 行受影响)
-----------------------
2010-03-03 16:19:25.143(1 行受影响)
*/
select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
/*------------
201003(1 行受影响)
------------
2010-0(1 行受影响)
*/
select substring(convert(varchar(20),GETDATE(),120),1,6)
这样的结果是一样的
select convert(varchar(20),GETDATE(),112) --20100303这两个都不一样,后面肯定不一样啊。
前者就是字符之间的取位,112 并没有起作用。
后者是先时间转换,然后转字符串。 所以出来就只有8位
[style] --引自联机丛书数据格式的样式,
1、将 datetime 或 smalldatetime 数据转换成字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型),或将已知日期或时间格式的字符数据转换成 datetime 或 smalldatetime 数据;
2、将 float、real、money 或 smallmoney 数据转换成字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。
如果 style 为 NULL,则返回的结果也为 NULL。
-- 下面前两句的修改
select convert(varchar(6),convert(datetime,'2010-03-03 15:54:27.073'),112)
select convert(varchar(6),GETDATE(),112)
select substring(convert(varchar(20),cast('2010-03-03 15:54:27.073' as datetime),112),1,6)
--B:
select substring(convert(varchar(20),GETDATE(),112),1,6) --這樣就相同了 原因在於'2010-03-03 15:54:27.073'做為了字符型處理 而非日期型
/*
------------
201003(1 個資料列受到影響)
------------
201003(1 個資料列受到影響)
*/
select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
中'2010-03-03 15:54:27.073'为字符串处理了。转换就可以了。
转换两种:
cast('2010-03-03 15:54:27.073' as datetime)
Convert(datetime,'2010-03-03 15:54:27.073')
B:select substring(convert(varchar(20),GETDATE(),120),1,6)