创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认
Posted
技术标签:
【中文标题】创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认【英文标题】:Creating SQL table where empty string on DATETIME or INT doesn't default 【发布时间】:2012-06-12 20:13:00 【问题描述】:如何创建一个表,以使带有空字符串的 INSERT INTO
对于 DATETIME
数据类型不默认为 1900 年 1 月 1 日,对于 INT
数据类型不默认为 0?
CREATE TABLE TEST
(
TS DATETIME,
VA INT
)
INSERT INTO TEST VALUES ('','')
INSERT INTO TEST VALUES ('','2')
INSERT INTO TEST VALUES ('2012-06-08 12:13:14','')
SELECT * FROM TEST
SQL FIDDLE
【问题讨论】:
您不希望数据类型为默认值,但您想要什么默认值?空? 理想情况下是空的,但我意识到在INSERT
期间这是不可能的,而是在SELECT
使用CONVERT()
【参考方案1】:
不要尝试为 DATETIME 列插入空字符串 ''
。
请改用NULL
。
如果您将列定义为 NULL,这将起作用。
INSERT INTO TEST VALUES (NULL,'')
INSERT INTO TEST VALUES (NULL,'2')
INSERT INTO TEST VALUES ('2012-06-08 12:13:14','')
【讨论】:
谢谢。我意识到强制值为空只能在SELECT
级别使用CONVERT
【参考方案2】:
这是您问题的答案:
CREATE TABLE TEST
(
TS DATETIME NULL DEFAULT NULL,
VA INT NULL DEFAULT NULL
)
INSERT INTO TEST (VA) VALUES (1)
INSERT INTO TEST (TS) VALUES ('2012-06-08 12:13:14')
【讨论】:
【参考方案3】:在创建表本身时为列配置一些默认值。 例如:默认为 null
CREATE TABLE TEST
(
TS DATETIME DEFAULT NULL,
VA INT DEFAULT NULL
)
这将在插入时存储 0000:00:00 00:00:00 和 '' 作为值。
【讨论】:
以上是关于创建 SQL 表,其中 DATETIME 或 INT 上的空字符串不默认的主要内容,如果未能解决你的问题,请参考以下文章
在sql server 2008中如何查询本日、本周和本月数据
将 datetime-local 类型的表单数据发布到 sql 表 datetime 字段