分配要在查询

时间:2018-04-11 07:59:03

标签: sql ssms sql-server-2017

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

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

SELECT *

FROM table

where date = @date1

谢谢

3 个答案:

答案 0 :(得分:2)

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

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

然后在您的查询中引用@ date1,如上所述。

更广泛地说,语法是:

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

答案 1 :(得分:0)

DECLARE @date1 DATE = '2018-04-11'

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

答案 2 :(得分:0)

-- 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