我正在从Oracle迁移到SQL Server,我注意到在查询中分配变量的差异。我想知道是否有人可以给我一个简单的例子,说明如何在SSMS中做到这一点?
在下面的例子中,我希望在select语句的开头分配变量@ date1,这样我就可以简单地在顶部更改日期,而不必在使用@date1的查询中多次更改日期几次。
SELECT *
FROM table
where date = @date1
谢谢
答案 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