我需要以下查询的帮助。我想在select命令的返回值上加上一个条件,它是一个介于0和任意数字之间的整数。
DECLARE @month varchar(50);
set @month ='01-03-05-07-09-11'; <--- clarification: these are all months
Declare @cur_month int;
set @cur_month = Month(GetDate());
select charindex(str(@cur_month), @month);
我基本上想要
If ( select charindex(str(@cur_month), @month))
// successful
我收到错误
在上下文中指定的非布尔类型的表达式 条件是预期的,靠近'print'。
我尝试了CAST和CONVERT,但没有可用。正如您所看到的,我正在尝试查看当前月份是否在我的@month字段中,如果是,我想执行某些操作。
答案 0 :(得分:2)
从@PaulStock获得一些调整的答案会更好。
PaulStock回答的变化
实际代码
DECLARE @month VARCHAR(50);
set @month ='03-05-12-09';
set @month = '-' + @month + '-'
IF CHARINDEX('-' + right('00' + CAST(MONTH('2/13/2011') AS VARCHAR), 2) + '-', @month) > 0
PRINT 'exists'
ELSE
PRINT 'does not exist'
答案 1 :(得分:0)
不使用字符串函数,而是使用日期函数,因为您尝试将一个日期字段与另一个日期字段进行比较。并使用datetime
代替@month而不是varchar:
DECLARE @month datetime;
set @month ='09-03-05';
IF MONTH(@month) = MONTH(CURRENT_TIMESTAMP)
PRINT 'Same Month'
<强>更新强>
根据您更新的问题,这是新代码:
DECLARE @month VARCHAR(50);
set @month ='03-05-02-09';
IF CHARINDEX(CAST(MONTH(CURRENT_TIMESTAMP) AS VARCHAR), @month) > 0
PRINT 'Same Month'
答案 2 :(得分:0)
我不知道您使用的SQL语言有哪些变体,因为SQL不支持变量和IF语句,但为什么不使用变量来表示条件的结果呢?
SELECT @MyResult=charindex(str(@cur_month), @month);
-- Now you can write an IF statement using the variable
IF @MyResult...
答案 3 :(得分:0)
select charindex的返回值是一个整数,而不是布尔类型。你需要在你的if语句中添加一个布尔值。
尝试类似:
如果(选择charindex(str(@cur_month),@ month)&gt; 0)
答案 4 :(得分:0)
该解决方案将零填充到左侧数月<&lt; 10,确保它适用于二月(2)当12月在列表(12)上时,正如OCary所指出的那样
DECLARE @month varchar(50);
set @month ='01-05-07-09-11-12';
If (charindex(right('0' + CAST(MONTH(getdate()) as varchar), 2), @month) > 0)
PRINT 'Same Month'
如果你运行这个:
select right('0' + CAST(MONTH(getdate()) as varchar), 2)
返回09