将日期和时间列转换为SQL格式的日期和时间

时间:2019-10-20 09:32:01

标签: sql sql-server

我想将日期和时间的字符串更新/转换为SQL日期和时间格式,即它看起来完全一样,但它不会读作nvarchar,而是日期和时间。

Date            Time
20-10-2019  12:00:00
20-10-2019  11:00:00
20-10-2019  10:00:00
20-10-2019  09:00:00
20-10-2019  08:00:00
20-10-2019  07:00:00

我使用熊猫从站点收集了这些数据,将其转换为数据框,然后将其插入MSSQL服务器中,该服务器已经创建了一个表。

到目前为止,我做到了

SELECT CONVERT (date,'19-10-2019') as Date
SELECT CONVERT (time,'17:00:00',120) as Time;

但这只能转换一个列,而我想转换整个列,并将其另存为另一列(我也做到了)。

alter table <table_name>
add <col_name> date

alter table <table_name>
add <col_name> time

任何人都可以帮忙,因为我在网上搜索了一段时间,并且无法获得适当的结果,而且我大多会收到此错误:

'''从字符串转换日期和/或时间时转换失败。'

3 个答案:

答案 0 :(得分:0)

您可以按样式105转换日期。CAST and CONVERT

CONVERT(DATE, '20-10-2019', 105), CONVERT(TIME, '12:00:00')

并用于更新所有行

UPDATE table SET NewDateColumn = CONVERT(DATE, [Date], 105), 
                 NewTimeColumn = CONVERT(TIME, [Time])

答案 1 :(得分:0)

要将字符串日期或时间转换为日期和时间格式,

SELECT TRY_CONVERT(date, '20-10-2019', 105) as [Date], TRY_CAST('12:00:00' AS TIME) as [Time]

要更新

UPDATE table SET datecol = TRY_CONVERT(DATE, DateString, 105), 
                 timecol = TRY_CAST(TimeString AS time)

答案 2 :(得分:0)

首先,列中的数据不正确。您应该找到那个。您可以使用:

SELECT t.*
FROM t
WHRE TRY_CONVERT(date, t.datecol) IS NULL OR 
     TRY_CONVERT(time, t.timecol) IS NULL;

注意:您可能想为date转换添加格式,但是如果默认方法有效(如您所愿),则可能没有必要。

一旦数据固定,或者您决定对NULL值的不良值感到满意,那么您有两种选择。

您可以添加计算列:

alter table t add real_date as (try_convert(date, t.datecol));
alter table t add real_time as (try_convert(time, t.timecol));

或者,您可以在适当位置更改列:

-- first convert to default string formats
update t
    set datecol = try_convert(date, t.datecol),
        timecol  = try_convert(time, t.timecol);

-- then alter the types
alter t alter column datecol date;
alter t alter column timecol time;