Поместите условие в команду выбора: charindex - SQL - PullRequest
1 голос
/ 27 сентября 2011

Мне нужна помощь по следующему запросу.Я хочу поставить условие на возвращаемое значение команды выбора, представляющее собой целое число от 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 ]

2 голосов
/ 27 сентября 2011

Получение ответа от @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'
0 голосов
/ 27 сентября 2011

Это решение добавляет ноль влево в течение месяцев <10, чтобы убедиться, что оно работает для февраля (2), когда декабрь входит в список (12), как было указано OCary </p>

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

0 голосов
/ 27 сентября 2011

Я не знаю, какой вариант языка SQL вы используете, поскольку SQL не поддерживает переменные и операторы IF, но почему бы не использовать переменную для представления результата условия?

SELECT @MyResult=charindex(str(@cur_month), @month); 

-- Now you can write an IF statement using the variable
IF @MyResult...
0 голосов
/ 27 сентября 2011

Возвращаемое значение для select charindex является целым числом, а не логическим типом.Вам нужно вставить логическое выражение в оператор if.

Попробуйте что-то вроде:

If (выберите charindex (str (@cur_month), @month)> 0)

0 голосов
/ 27 сентября 2011

Вместо использования строковых функций используйте функции даты, поскольку вы пытаетесь сравнить одно поле даты с другим.И используйте 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...