【问题标题】:I am trying to fill tables with values but I got conversion failed error我正在尝试用值填充表格,但出现转换失败错误
【发布时间】:2022-01-18 15:12:14
【问题描述】:

我正在创建一个数据库,我正在尝试用值填充表,但出现错误

消息 241,第 16 级,状态 1,第 3 行
从字符串转换日期和/或时间时转换失败。

查询代码:

INSERT INTO Register_of_crimes (id_crime , Date, List_of_crime , Fine)
VALUES ('1', '1989-3-6', 'Rušenie nočného kľudu', '30'),
       ('2', '1991-3-3', 'Poškodzovanie cudzej veci', '50'),
       ('3', '2011-3-3', 'Pitie alkoholu na verejnosti', '20'),
       ('4', '1999-6-5', 'Výtržnosti na verejnosti', '40')

我创建的表:

CREATE TABLE Register_of_crimes
(
    id_crime int,
    Date date,
    List_of_crime varchar (150),
    Fine money,
    PRIMARY KEY (id_crime)
)

感谢您的所有回答和建议

【问题讨论】:

  • 您使用的是哪种数据库产品?从错误消息来看,我希望它不喜欢您的日期格式,您应该使用标准格式,例如与 ISO8601 兼容的格式,例如YYYY-MM-DD。因此,例如,我希望 1991-3-3 需要更改为 1991-03-03
  • 还可以尝试非 ASCII 字符的国家字符文字。例如。 N'Rušenie nočného kľudu'.
  • 并且不需要将数值作为字符串传递,即将 2 作为 2 传递,而不是 '2'。
  • 您使用的是哪个数据库?日期格式标准取决于您使用的数据库。
  • 我想,把 List_of_crime 改成 nvarchar(150) 来处理特殊字符会很好

标签: sql sql-server database


【解决方案1】:

您实际上应该使用19910303,不要使用破折号。

SQL Server 在大多数语言中将1991-03-03 解释为YYYY-DD-MM,如下所示:

SET LANGUAGE Deutsch;    
SELECT CONVERT(datetime, '1991-03-13');

结果:

消息 242,级别 16,状态 3
Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs。

(如果您转换为 date,它实际上可以正常工作,但这是一个例外,最好始终保持相同、明确的格式。)

您还应该确保使用正确的数据类型(可能还有正确的排序规则)声明可能包含 Unicode 字符的字符串,并且所有字符串文字都以 N 为前缀。 not 的整数也被字符串分隔符包围。所以我希望:

List_of_crime nvarchar(150)
--------------^

...和...

VALUES (1, '19890306', N'Rušenie nočného kľudu', 30)

【讨论】:

  • 这实际上对我有用
【解决方案2】:

使用明确的日期和时间格式。在 SQL Server 中,它们是 yyyyMMddyyyy-MM-ddThh:mm:ss.nnnnnnn。此外,当您的数据类型是数字时,不要将它们用单引号 (') 括起来,这适用于文字字符串。我假设您的值采用yyyy-M-d 格式:

INSERT INTO Register_of_crimes (id_crime , Date, List_of_crime , Fine)
VALUES (1,'19890306','Rušenie nočného kľudu', 30),
       (2,'19910303','Poškodzovanie cudzej veci',50),
       (3,'20110303','Pitie alkoholu na verejnosti',20),
       (4,'19990605','Výtržnosti na verejnosti',40);

另外,您可能会发现您为List_of_crime 插入的值会丢失数据,因为字符位于代码页之外(例如,ľ 可能会隐式转换为l)。如果是这种情况,您需要 ALTER 您的表,以便 List_of_crimenvarchar,然后使用 nvarchar 文字字符串,例如 N'Rušenie nočného kľudu'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 2022-11-13
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多