【问题标题】:Assigning variables to use in query分配要在查询中使用的变量
【发布时间】:2018-04-11 07:59:03
【问题描述】:

我正在从 Oracle 迁移到 SQL Server,我注意到在查询中分配变量的差异。我想知道是否有人可以给我写一个简单的例子来说明我如何在 SSMS 中做到这一点?

在下面的示例中,我希望在 select 语句的开头分配变量 @date1,这样我就可以简单地更改顶部的日期,而不必在使用 @date1 的查询中多次更改它几次。

SELECT *

FROM table

where date = @date1

谢谢

【问题讨论】:

    标签: sql ssms sql-server-2017


    【解决方案1】:

    根据您的示例,语法如下:

    DECLARE @date1 DATETIME
    SET @date1 = '2017-01-01 00:00:00.000'
    

    然后像上面一样在查询中引用@date1。

    更广泛地说,语法是:

    DECLARE @<name of variable> <type>
    SET @<name of variable> = <value>
    

    【讨论】:

      【解决方案2】:
      -- Simple declares
      DECLARE @Variable1 VARCHAR(100)
      DECLARE @Variable2 DATE
      DECLARE @VariableTable TABLE (
          numberColumnName INT,
          textColumnName VARCHAR(MAX))
      
      -- Chained declares
      DECLARE
          @Variable3 VARCHAR(100),
          @Variable4 INT
      
      -- Declare with initiation
      DECLARE @Variable5 INT = 150
      DECLARE @Variable6 DATE = '2018-05-05' -- Implicit conversion (varchar to date)
      DECLARE @Variable7 FLOAT = 1945.15 * 1648.12 / @Variable5 -- Expressions can be used
      DECLARE @Variable8 INT = (SELECT COUNT(1) FROM sys.objects)
      
      -- Chained declares with initiation
      DECLARE
          @Variable9 VARCHAR(100) = 'Afla',
          @Variable10 INT = 9164 * @Variable5
      
      -- Change variable values (without declaring)
      SET @Variable1 = 'Some value'
      SET @Variable2 = CONVERT(DATE, GETDATE())
      

      你的例子:

      DECLARE @DateFilter DATE = '2018-05-16' -- Use ISO standard date format (yyyy-MM-dd) when you hard-code them as literals
      
      SELECT
          *
      FROM
          YourTable AS T
      WHERE
          T.DateToFilter >= @DateFilter
      

      【讨论】:

        【解决方案3】:
        DECLARE @date1 DATE = '2018-04-11'
        

        此代码可能没问题,但请注意日期格式:date (Transact-SQL) 以及使用 Date、Datetime 或 Datetime2 的需要。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-28
          相关资源
          最近更新 更多