CAST()或CONVERT()不会将日期时间格式更改为SQL Server 2008中的字符串

时间:2015-10-05 05:25:53

标签: sql-server

我有一个datetime类型的列 我想分开使用left()&的日期和时间。由right()cast()包围的convert()如下所示:

Select BATCH, 
LEFT( CAST(S_DATE AS VARCHAR(20)),12) AS ST_DATE, 
RIGHT( CAST(S_DATE AS VARCHAR(20)),8) AS ST_TIME,
LEFT( CAST(E_DATE AS VARCHAR(20)),12) AS E_DATE, 
RIGHT( CAST(E_DATE AS VARCHAR(20)),8) AS E_TIME
INTO CRYST2
From Z_BATCH;

这是datetime列的实际格式: -

2015-10-01 14:00:00.000

但问题是它正在准确地分离日期和时间,但它不会以字符串形式返回输出,因为输出本身会转到日期和时间。时间格式分别在各自的列中。 以下是我得到的输出: -

1   Oct  1 2015       2:00PM    Oct  1 2015       2:30PM

正如您可以清楚地看到我在日期时间到字符串转换后分隔的列仍然仅以某种日期时间格式提供输出。 请帮忙。

4 个答案:

答案 0 :(得分:1)

  

这是我对datetime列的实际格式:

     

2015-10-01 14:00:00.000

不,不是。 datetime值根本没有格式,它只代表一个时间点。只有在将其转换为字符串时才会获得格式。

转换日期时间值时,您根本没有指定任何格式,因此它将使用默认格式(0)。您可以使用您看到显示为(121)的日期时间值的格式来获得所需的结果:

Select BATCH, 
LEFT( CAST(S_DATE AS VARCHAR(19),121),10) AS ST_DATE, 
RIGHT( CAST(S_DATE AS VARCHAR(19),121),8) AS ST_TIME,
LEFT( CAST(E_DATE AS VARCHAR(19),121),10) AS E_DATE, 
RIGHT( CAST(E_DATE AS VARCHAR(19),121),8) AS E_TIME
INTO CRYST2
From Z_BATCH;

答案 1 :(得分:0)

以正确的格式投射日期和时间,如:

CAST(S_DATE AS Time) AS ST_TIME
CAST(S_DATE AS Date) AS ST_Date

将返回:

14:00:00
2015-10-01

答案 2 :(得分:0)

使用格式CONVERT的{​​{1}}来获得所需的结果,它始终返回格式120

yyyy-MM-dd hh:mm:ss

答案 3 :(得分:0)

如果您想以字符串格式获得结果,可以试试这个:

select convert(varchar(11),cast(S_DATE  as date),106)
select convert(varchar(11),cast(S_DATE  as time),100)

如果您尝试以日期和时间格式获得答案,请尝试以下操作:

CAST(S_DATE AS Time) AS ST_TIME
CAST(S_DATE AS Date) AS ST_Date