将条件置于select命令:charindex - SQL

时间:2011-09-27 17:34:56

标签: sql select if-statement

我需要以下查询的帮助。我想在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字段中,如果是,我想执行某些操作。

5 个答案:

答案 0 :(得分:2)

从@PaulStock获得一些调整的答案会更好。

PaulStock回答的变化

  • 左脚垫为前导零。 2!= 02并且不匹配。
  • 在字符串的开头和结尾添加连字符,这样每个值的格式都是-XX-我将其包括在内,以防您意识到您没有前导零。如果你总是有前导零,你将不需要这个。

实际代码

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