如何更新 SQL 中名为 Date 的列?
How do I update a column named Date in SQL?
我有一个 table,它有一个名为 Date 的列。这会导致问题,因为 Date 是数据类型名称。我尝试了以下语句来逃避它:
Update Tables.Subtable SET `Date` = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET "Date" = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Tables.Subtable."Date" = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Tables.Subtable.`Date` = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Subtable."Date" = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Subtable.`Date` = "2022-03-14 07:20:32" WHERE ID=960646;
全部都出错了。这里的正确语法是什么?
问题出在您的日期文字被双引号分隔。这应该有效:
Update Tables.Subtable SET "Date" = '2022-03-14 07:20:32' WHERE ID=960646;
我看到您正在使用 MS SQL 服务器...
首先,SQL table 的标识符 AKA 名称、列、例程、约束......必须应用标准 SQL 规则,即:
- 只使用数字和纯拉丁字母(没有重音...)和下划线字符
- 不要以数字开头
- 长度不得超过 128 个字符
- 尽量不要使用 SQL 关键字 ("table', 'column', "date"...) 除非名称被双引号包围
因此,名为 Date 的列必须用双引号括起来,并且在 SQL Server
中可以完美运行
SELECT "Date", ...
一些 RDBMS 添加了特定的环绕技术。在 SQL 服务器中,您可以使用方括号来这样做...
SELECT [Date], ...
您查询中的另一个问题可能是日期时间格式。
如果列使用不推荐的 DATETIME 数据类型,无论会话设置如何,唯一支持的日期和时间格式是短 SQL ISO 格式,即:
'AAAAMMJJ hh:mm:ss.nnn'
你可以执行这段文字说服你:
SET LANGUAGE French;
SELECT CAST('2022-12-31 23:59:58' AS datetime) AS "Date";
--> Msg 242, Niveau 16, État 3, Ligne 3 La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
SET LANGUAGE English;
SELECT CAST('2022-12-31 23:59:58' AS datetime) AS "Date";
Date
-----------------------
2022-12-31 23:59:58.000
第一次测试表明,对于某些语言,这种格式 (Long SQL ISO) 是不可接受的table。
但是当你使用短 SQL ISO 格式时,没有问题...
SET LANGUAGE French;
SELECT CAST('20221231 23:59:58' AS datetime) AS "Date";
Date
-----------------------
2022-12-31 23:59:58.000
SET LANGUAGE English;
SELECT CAST('20221231 23:59:58' AS datetime) AS "Date";
Date
-----------------------
2022-12-31 23:59:58.000
当使用数据类型 DATE、DATETIME2、DATETIMEOFFSET、TIME 时,无论会话设置如何,唯一受支持的格式称为 long SQL ISO,依赖于 'AAAA-MM-JJ hh:mm:ss.nnnnnnn'。由于与 XML 的某些兼容性原因,标准 XML 日期时间格式也受支持 'YYYY-MM-DDThh:mm:ss.nnnnnnn'
如您在我的测试中所见:
SET LANGUAGE French;
SELECT CAST('2022-12-31 23:59:58' AS datetime2) AS "Date";
SET LANGUAGE English;
SELECT CAST('2022-12-31 23:59:58' AS datetime2) AS "Date";
现在两个 SQL 语句可以正常工作...
注意:.nnn...部分不是必需的,比例可以更小。
为什么有两种格式? 一种(短 SQL ISO)用于 DATETIME / SMALLDATETIME,第二种(长 SQL 格式)...因为SQL ISO 标准与时俱进。第一种格式是为 SQL ISO 标准的 SQL 2 (1992) 完成的。 SQL:1999 发布后的第二个。 DATETIME 和 SMALDATETIME 是八十年代末从 Sybase 继承而来的。 DATETIME2、DATE 和 DATTIME 偏移量已在 SQL Server 2008 中发布...
我有一个 table,它有一个名为 Date 的列。这会导致问题,因为 Date 是数据类型名称。我尝试了以下语句来逃避它:
Update Tables.Subtable SET `Date` = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET "Date" = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Tables.Subtable."Date" = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Tables.Subtable.`Date` = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Subtable."Date" = "2022-03-14 07:20:32" WHERE ID=960646;
Update Tables.Subtable SET Subtable.`Date` = "2022-03-14 07:20:32" WHERE ID=960646;
全部都出错了。这里的正确语法是什么?
问题出在您的日期文字被双引号分隔。这应该有效:
Update Tables.Subtable SET "Date" = '2022-03-14 07:20:32' WHERE ID=960646;
我看到您正在使用 MS SQL 服务器...
首先,SQL table 的标识符 AKA 名称、列、例程、约束......必须应用标准 SQL 规则,即:
- 只使用数字和纯拉丁字母(没有重音...)和下划线字符
- 不要以数字开头
- 长度不得超过 128 个字符
- 尽量不要使用 SQL 关键字 ("table', 'column', "date"...) 除非名称被双引号包围
因此,名为 Date 的列必须用双引号括起来,并且在 SQL Server
中可以完美运行SELECT "Date", ...
一些 RDBMS 添加了特定的环绕技术。在 SQL 服务器中,您可以使用方括号来这样做...
SELECT [Date], ...
您查询中的另一个问题可能是日期时间格式。
如果列使用不推荐的 DATETIME 数据类型,无论会话设置如何,唯一支持的日期和时间格式是短 SQL ISO 格式,即:
'AAAAMMJJ hh:mm:ss.nnn'
你可以执行这段文字说服你:
SET LANGUAGE French;
SELECT CAST('2022-12-31 23:59:58' AS datetime) AS "Date";
--> Msg 242, Niveau 16, État 3, Ligne 3 La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
SET LANGUAGE English;
SELECT CAST('2022-12-31 23:59:58' AS datetime) AS "Date";
Date
-----------------------
2022-12-31 23:59:58.000
第一次测试表明,对于某些语言,这种格式 (Long SQL ISO) 是不可接受的table。
但是当你使用短 SQL ISO 格式时,没有问题...
SET LANGUAGE French;
SELECT CAST('20221231 23:59:58' AS datetime) AS "Date";
Date
-----------------------
2022-12-31 23:59:58.000
SET LANGUAGE English;
SELECT CAST('20221231 23:59:58' AS datetime) AS "Date";
Date
-----------------------
2022-12-31 23:59:58.000
当使用数据类型 DATE、DATETIME2、DATETIMEOFFSET、TIME 时,无论会话设置如何,唯一受支持的格式称为 long SQL ISO,依赖于 'AAAA-MM-JJ hh:mm:ss.nnnnnnn'。由于与 XML 的某些兼容性原因,标准 XML 日期时间格式也受支持 'YYYY-MM-DDThh:mm:ss.nnnnnnn'
如您在我的测试中所见:
SET LANGUAGE French;
SELECT CAST('2022-12-31 23:59:58' AS datetime2) AS "Date";
SET LANGUAGE English;
SELECT CAST('2022-12-31 23:59:58' AS datetime2) AS "Date";
现在两个 SQL 语句可以正常工作...
注意:.nnn...部分不是必需的,比例可以更小。
为什么有两种格式? 一种(短 SQL ISO)用于 DATETIME / SMALLDATETIME,第二种(长 SQL 格式)...因为SQL ISO 标准与时俱进。第一种格式是为 SQL ISO 标准的 SQL 2 (1992) 完成的。 SQL:1999 发布后的第二个。 DATETIME 和 SMALDATETIME 是八十年代末从 Sybase 继承而来的。 DATETIME2、DATE 和 DATTIME 偏移量已在 SQL Server 2008 中发布...