【问题标题】:SQL Query - Can I compare using LEN in SELECT clause?SQL 查询 - 我可以在 SELECT 子句中使用 LEN 进行比较吗?
【发布时间】:2011-02-14 07:52:21
【问题描述】:

我基本上想这样做:

SELECT HasComments = CASE (LEN(Comments) > 1) WHEN 1 THEN 1 ELSE 0 END FROM TableName

换句话说,返回一个布尔值,告诉我 Comments 的长度是否大于 1。这给了我一个语法错误。

我怎样才能做到这一点?

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008 select


    【解决方案1】:
    SELECT  HasComments = CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END
    FROM    TableName
    

    【讨论】:

    • 所以我在错误的地方进行了比较。明白了。谢谢@Quassnoi!
    • 在较新的 SQL 版本中,这只是 SELECT CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END FROM TableName
    • @Harvey:和我写的有什么不同?
    • 语义上不是,但你的在 MS SQL Server v17 上对我不起作用。
    • @Harvey:它给出了什么错误信息?
    【解决方案2】:

    更好的方法是让 Comments NULLable 并检查它。然后可以利用索引而不是 LEN() 会导致的表扫描。

    【讨论】:

      【解决方案3】:

      您缺少whenend

      SELECT HasComments = CASE WHEN (LEN(Comments) > 1) WHEN 1 THEN 1 ELSE 0 END
       FROM TableName
      

      【讨论】:

        【解决方案4】:

        由于您没有 WHERE 子句,您很可能返回一列数据:

        SELECT  CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END as 'HasComments'
        FROM    TableName 
        

        【讨论】:

          【解决方案5】:

          对于较新的 SQL 版本:

          SELECT CASE WHEN LEN(Comments) > 1 THEN 1 ELSE 0 END FROM TableName
          

          【讨论】:

            猜你喜欢
            • 2011-01-20
            • 1970-01-01
            • 1970-01-01
            • 2012-10-19
            • 2020-09-27
            • 1970-01-01
            • 2018-08-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多