2013-09-06 2 views
0

Я строю таблицу temp - sqlserver. Теперь в этой временной таблице я хочу проверить, существует ли одно целое целое число в текстовом поле другого столбца или нет.Сравните два столбца (один varchar, один int)

Для примера. у меня есть col. дней, который имеет значения 2,10,15,30 ... и поэтому один раз и для каждого значения, а также другие столбцы, которые имеют весь текст, который содержит описание набора правил, а в конце временная шкала - 2 Календарные дни или 30 дней календаря или 10 рабочих дней, которые должны соответствовать столбцу целого числа.

Как сравнить значение int в текстовых совпадениях в столбце текста правил?

Для примера.

col1 col2 
2  ....should happen....- 2 business days 
4  ....should happen....- 4 business days 
5  ....should happen....- 5 business days 
6  ....should happen....- 6 business days 
15  ....should happen....- 15 business days 
30  ....should happen....- 30 business days 
+0

http://technet.microsoft.com/en-us/library/ms186323.aspx и http://technet.microsoft. com/en-us/library/ms187928.aspx –

+0

'SELECT LEFT (RIGHT (col2,13), 2) AS col2, col1 FROM tempTable' –

+0

Действительно ли col2 всегда заканчивается' ... бизнес-днями'? это '-' перед номером, всегда присутствующим, и единственным тире? –

ответ

2

Вы можете отфильтровать int из строки, как показано ниже. (На основе нескольких предположений: only one '-' in the string before the number, number has left and right spaces)

declare @s varchar(100) = '...should happen....- 20 business days' 

;with cte as (
    select right(@s,len(@s)-charindex('-',@s,0)- 1) as rightText 
) 
select left(rightText, charindex(' ', rightText,0)) 
from cte 

запрос будет как

;with cte as (
    select col1, col2, 
      right(col2,len(col2)-charindex('-',col2,0)- 1) as rightText 

    from yourTable 
) 
select col1,col2 
from cte 
where left(rightText, charindex(' ', rightText,0)) = col1 
+0

большое спасибо .. CTE работает –

0

Во-первых, вы можете получить номер с VARCHAR как это:

SUBSTRING(col2, CHARINDEX('-', col2) + 1, 2) 

Затем вы можете преобразовать его в INT, как это:

CONVERT(INT, SUBSTRING(col2, CHARINDEX('-') + 1, 2)) 

SUBSTRING

CHARINDEX

CONVERT

+0

получение ошибка: Msg 189, уровень 15, состояние 1, строка 1065 Функция charindex требует от 2 до 3 аргументов. –

+0

Извините, забыли добавить 'col2' в качестве второго параметра. Он должен быть исправлен. – Tricky12

1
SELECT * 
FROM TEMP 
WHERE col2 LIKE '%- '+cast(col1 as varchar)+' % days' 

См SQLFIDDLE

Или может быть:

SELECT *, 
     CASE WHEN col2 LIKE '%- '+cast(col1 as varchar)+' % days' 
      THEN 'Exists' 
      ELSE 'Not Exists' END AS "Exists" 
FROM TEMP 

См SQLFIDDLE

Для msi77:

Results:

| COL1 |         COL2 |  EXISTS | 
|------|-----------------------------------------|------------| 
| 2 | ....should happen....- 2 calendar days |  Exists | 
| 2 | ....should happen....- 20 calendar days | Not Exists | 
| 4 | ....should happen....- 4 calendar days |  Exists | 
| 5 | ....should happen....- 5 business days |  Exists | 
| 6 | ....should happen....- 6 business days |  Exists | 
| 15 | ....should happen....- 15 business days |  Exists | 
| 999 | ....should happen....- 00 business days | Not Exists | 
| 30 | ....should happen....- 30 business days |  Exists | 
+0

А как насчет такой строки? \t (2, '.... должно произойти ....- 20 рабочих дней') – msi77

+0

@ msi77 Абсолютно не проблема ...см. [SQLFIDDLE] (http://www.sqlfiddle.com/#!3/302f2/1/0) –

+0

Что-то изменилось. OK – msi77

Смежные вопросы