【问题标题】:How to enclose values in SQL commands?如何在 SQL 命令中包含值?
【发布时间】:2009-10-11 01:09:58
【问题描述】:

无错误的列名语法是[My Column],而不是My Column,这会导致错误。

无错误的字符串值语法是 '25,00',而不是导致错误的 25,00

如果列数据类型是数字,则使用单引号将值括起来时出现错误。是否有任何其他方法可以安全地为字符串或数字数据类型包含值?

【问题讨论】:

  • 它必须是某种形式的 MS SQL Server - AFAIK 它是唯一使用方括号中的非标准(如,不受 ISO 9075 批准)表示法的服务器。在任何其他服务器中(也许 Sybase 除外),这与其说是没有错误,不如说是有错误保证。 SQL 标准使用双引号将分隔标识符括起来,并在字符串周围使用单引号。

标签: sql syntax string numbers compiler-errors


【解决方案1】:

数值没有任何包围或逗号。

对于字符串,根据您的设置,在某些 DB 中它可以是单引号或双引号。

【讨论】:

    【解决方案2】:

    在 SQL Server 中,Cast / Convert 函数是区域感知的。因此,在查询中使用转换,将数字作为带引号的字符串传递,将其转换为所需的十进制类型。例如:

    SELECT CONVERT(decimal(5,2),'1234,56')
    

    【讨论】:

    • 我认为这是错误的。据我所知,SQL Server 从不使用区域设置来解释小数分隔符。您是否实际上在欧洲安装上测试了这个 CONVERT 语句并发现它成功了?
    【解决方案3】:

    使用引号时可能会出错,因为字符串 '25,00' 不是有效的十进制数。查看您的 RDBMS 文档,了解字符串是如何隐式转换为数字类型的。

    如果没有引号,我相信 25,00 也是无效的,无论您身在何处。 SQL 标准不允许使用逗号作为小数分隔符来指定文字数字。

    【讨论】:

      【解决方案4】:

      My Column 这样的列名会因为其中的空格而导致错误。 [My Column] 消除了歧义。

      '25,00' 这样的值是有效的,因为引号使它成为一个字符串,而 25,00 因为逗号而不是有效的数字(至少在您所在的地区不是)。

      如果您要插入 25,00 作为一个数字,DB 如何将它与 两个 数字区分开来?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多