创建 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 存储过程 - 表作为参数

在sql server 2008中如何查询本日、本周和本月数据

将 datetime-local 类型的表单数据发布到 sql 表 datetime 字段

SQL 其中 datetime 列等于今天的日期?

使用 SQL Server 上的 JDBC Sink 连接器自动创建适当的 DATETIME 类型字段

使用相同的函数设置多个类属性