【问题标题】: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 的需要。