SQL插入时间格式问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL插入时间格式问题相关的知识,希望对你有一定的参考价值。

参考技术A 根据你这个时间格式
2015-06-20
00:00:00.000
看上去不是
Oracle
数据库的样子。
可能是
SQL
Server
数据库。
1>
2>
3> -- 使用强制指定 时分秒的算法
4> SELECT Convert(datetime, '2015-06-20 23:59:59') AS result;
5> GO
result
-----------------------
2015-06-20 23:59:59.000
(1 行受影响)
1>
2>
3> -- 使用 加1天, 减1秒的算法
4> SELECT DATEADD(ss, -1, DATEADD(dd, 1, '2015-06-20')) AS result;
5> GO
result
-----------------------
2015-06-20 23:59:59.000
(1 行受影响)
参考技术B 你可以试试这样的,希望能够帮到你
insert 表名 (时间字段) values (DATEADD(s,-1,DATEADD(d,1,'2015-6-20'))) 或者你那样用DATEADD函数加也可以
insert 表名 (时间字段) values (DATEADD(s,86399,'2015-6-20'))
参考技术C 首先,你这个时间是怎么获取的?如果是用语言获取,那可以用语言进行处理后再插入
如果直接在sql里面,那么可以这样
insert
into
tab(datetime)
VALUES(DATEADD(s,86399,'2015-06-20'))

将 SQL 插入脚本转换为 CSV 格式

【中文标题】将 SQL 插入脚本转换为 CSV 格式【英文标题】:Transform SQL insert script into CSV format 【发布时间】:2015-11-08 16:10:38 【问题描述】:

我正在寻找 awk 命令或类似工具,将标准格式良好的 SQL 插入脚本转换为 csv 文件。 按照标准,我的意思是任何地方都没有数据库供应商特定的东西。 格式良好是指 sql 脚本的每一行都有一个完整的列集插入的情况,即使有 NULL 也是如此。此外,要插入的字段顺序也是相同的。 示例输入 SQL 脚本:

INSERT INTO tbl VALUES (1, 'asd', 923123123, 'zx');
INSERT INTO tbl VALUES (1, NULL, 923123123, 'zxz');
INSERT INTO tbl VALUES (3, 'asd3', 923123123, NULL);

可选:

INSERT INTO tbl (colA, colB, colC, colD) VALUES (1, 'asd', 923123123, 'zx');

预期的输出应该是一个 csv 文件:

1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,

寻找性能高效的解决方案。

【问题讨论】:

csv 实际上是邪恶的。如果文本数据从不包含单引号(aka tick = '),那么我猜它没问题。其他要添加的测试用例包括模拟通用名称和地址数据:INSERT INTO tbl VALUES (1, NULL, 923123123, 'foo'' bar');插入 tbl 值 (1, NULL, 923123123, 'foo , bar');插入 tbl 值 (1, NULL, 923123123, 'foo ,'', bar'); csv 是最广泛使用的数据交换格式,如果它是邪恶的,它仍然是我们必须理解的。如果你有不错的工具将数据提取到 csv,那么你会很好。 【参考方案1】:

用 GNU grep 和 sed 试试这个:

grep -oP '\(\K[^)]*(?=\);)' file | sed 's/NULL//g;s/ //g'

所有四行的输出:

1,'asd',923123123,'zx' 1,,923123123,'zxz' 3,'asd3',923123123, 1,'asd',923123123,'zx'

或仅使用 GNU sed:

sed 's/.*(\([^)]*\));/\1/;s/NULL//g;s/ //g' file

所有四行的输出:

1,'asd',923123123,'zx' 1,,923123123,'zxz' 3,'asd3',923123123, 1,'asd',923123123,'zx'

【讨论】:

这些都不会检查单词 NULL 是它自己的字段而不是字段的一部分,因此它将删除文字字符串中的 NULL,并且它还会删除所有空格,包括文字字符串中的空格.【参考方案2】:
$ awk -F' *[(),]+ *' -v OFS=, 'for (i=2;i<NF;i++) printf "%s%s", ($i=="NULL"?"":$i), (i<(NF-1)?OFS:ORS)' file
1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,

我建议您使用此输入测试所有可能的解决方案:

$ cat file
INSERT INTO tbl VALUES (1, NULL, 923123123, 'foo NULL bar');

$ awk -F' *[(),]+ *' -v OFS=, 'for (i=2;i<NF;i++) printf "%s%s", ($i=="NULL"?"":$i), (i<(NF-1)?OFS:ORS)' file
1,,923123123,'foo NULL bar'

确保字符串NULL 和空白字符在作为文字字符串的一部分出现时不会被删除。

【讨论】:

【参考方案3】:
awk -F'[()]' -v OFS=, 'gsub(/NULL|;/,"")gsub(/, /,",")print $(NF -1)' file
1,'asd',923123123,'zx'
1,,923123123,'zxz'
3,'asd3',923123123,

【讨论】:

以上是关于SQL插入时间格式问题的主要内容,如果未能解决你的问题,请参考以下文章

关于插入数据库时间格式的问题

MS Access:使用 VBA 进行 SQL 插入的日期格式

如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]

将 SQL 插入脚本转换为 CSV 格式

在Oracle使用sql语句中如何插入日期格式的数据

如何将格式为“3/22/2018 12:24:29 PM”的日期时间字符串格式化为sql时间戳以插入内存数据库中的h2?