gpt4 book ai didi

sql - 将 VARCHAR 转换为 SMALLDATETIME 作为 UPDATE 语句的一部分

转载 作者:行者123 更新时间:2023-12-04 04:38:22 24 4
gpt4 key购买 nike

我正在对 CSV 文件执行批量数据导入。在 CSV 文件中,我的“日期”列包含格式为“YYYYDDMMHHMM”的日期(例如 200603010929)。

就目前而言,如果我在创建表时选择“smalldatetime”,数据导入将失败并显示以下错误:

Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 2 (Date).



据我了解,要使其工作,日期必须是某种格式才能工作。

因此,我的一个想法是将日期值导入到 VARCHAR 类型的字段中,然后在导入完成后我想对每一行执行 UPDATE 以将日期转换为 smalldatetime。这会延长导入过程,但我认为这比尝试对 CSV 数据(这是一个庞大的数据集)进行查找和替换要容易得多,速度也快得多。

所以,我的问题是:
1)这可能吗?
2)我如何实现它?

这是我到目前为止:
UPDATE NYSE
SET [date]=CONVERT(smalldatetime, [date])

这失败了,因为文本格式不正确。是否可以在 CONVERT 函数中指定字符串的格式,还是有其他方法?

我感谢所有评论。谢谢。

最佳答案

DECLARE @s TABLE([date] VARCHAR(20));

INSERT @s SELECT '200603010929';

UPDATE @s SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME,
LEFT([date],4) + SUBSTRING([date],7,2) + SUBSTRING([date],5,2)
+ ' ' + STUFF(RIGHT([date],4),3,0,':')), 120);

SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @s;

如果它实际上是 YYYYMMDD,那么它稍微简单一点:
DECLARE @s TABLE([date] VARCHAR(20));

INSERT @s SELECT '200603010929';

UPDATE @s SET [date] = CONVERT(CHAR(16), CONVERT(SMALLDATETIME,
LEFT([date],8) + ' ' + STUFF(RIGHT([date],4),3,0,':')), 120);

SELECT [date], CONVERT(SMALLDATETIME, [date]) FROM @s;

关于sql - 将 VARCHAR 转换为 SMALLDATETIME 作为 UPDATE 语句的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19337466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com