2013-08-30 3 views
2

Можно ли использовать регулярное выражение для выбора элемента из базы данных? Элемента таблицы, как показано нижеSql Server select с регулярным выражением

Table column|name| 
10.01.02 | a | 
100.2.03 | b | 
1021.10.04 | c | 

Теперь моя проблема заключается в том, что мне нужно, чтобы выбрать столбец и получить подстроку как ниже

Table column|name| 
10.01  | a | 
100.2  | b | 
1021.10  | c | 

любого предложение с регулярным выражением или подстроками?

ответ

0

Попробуйте это,

SELECT SUBSTRING(column1,0,(CHARINDEX('.',column1,CHARINDEX('.',column1)+1))) 
FROM Table1 

SQL Fiddle Demo

+0

спасибо, что он работает правильно –

0
select left(a, datalength(a) - charindex('.', reverse(a))), b 
from (
    select '10.01.02', 'a' union all 
    select '100.2.03', 'b' union all 
    select '1021.10.04', 'c' 
) t(a,b) 

Я думаю, что нет решения с регулярным выражением.

UPD

Другое решение:

select reverse(parsename(reverse(a), 1)) + '.' + reverse(parsename(reverse(a), 2)), b 
from (
    select '10.01.02', 'a' union all 
    select '100.2.03', 'b' union all 
    select '1021.10.04', 'c' 
) t(a,b) 
+0

что, если есть больше деталей в колонке таблицы –

+0

Вы не сказали, что вам нужно оставить только две первые секции вместо того, чтобы удалить последний один. См. Другое решение. Я обновил свой ответ. – GriGrim

0

Там может просто разумный способ. Но это то, о чем я могу думать.

select substr(column, 1,lenght(column)-instr(reverse(column),'.'), name from table; 
+0

Я думаю, что функция длины не работает в MSsql. –

+0

Приношу свои извинения. Я не заметил, это для сервера sql. Я неправильно читаю mssql как mysql. –