2015-05-14 72 views
2

我在SQL Server中使用下面的代碼正則表達式在SQL Server檢查空格

select First_Name 
from sc.Name 
where First_Name LIKE '%[^a-zA-Z]%'; 

如何添加前導和尾部空格支票檢查無效名稱(姓名有特殊字符)?

+0

是這樣的,但應該是什麼樣的替代正則表達式來多元化的格局? – Leo

+0

你的謂詞應該適用於尾隨空間和領先空間 –

+0

那麼,沒有法文,德文,瑞典文,挪威文,西班牙文名稱或英文名字帶短劃線? –

回答

1

沒有本地正則表達式在SQL Server中,但是有pattern matching。一個簡單的方法來選擇最終列或以空格開始將是:

SELECT myColumn 
FROM myTable 
WHERE (myColumn LIKE '% ') 
    OR (myColumn LIKE ' %') 
    OR (myColumn LIKE '%[^a-z]%') 

一個比較「重」的搜索,但對於一次性查詢它會工作。

當然,如果你正在尋找開頭和結尾的空格,而且要求是真的,它有兩個,那麼你可以使用:

(myColumn LIKE ' %[^a-z]% ') 

或者以上的任意組合,以滿足您的需求。

+0

不正確,但使用'OR'使其變慢;)。 –

+0

@ shA.t是的,但是如果他想要所有的連擊,就需要OR。它不會像'''雖然,但它更簡單:) – Mackan

0

試試這個:

create table a(b varchar(50)) 
insert into a VALUES(' sadf'),('asdg ') 

select b from a where b LIKE '[^a-zA-Z]%' or b LIKE '%[^a-zA-Z]'; 
+1

像「'asd#$ a''這樣的值在您的答案中被認爲是有效的,按照OP – ughai

1

可以使用First_Name <> LTRIM(RTRIM(First_Name))檢查開頭和結尾的空格,如:

SELECT First_Name 
FROM sc.Name 
WHERE First_Name LIKE '%[^a-zA-Z]%' 
    AND First_Name <> LTRIM(RTRIM(First_Name)) 
+0

不錯(呃)一:)除了AND應該可能是一個或所有'虛假'名稱組合 – Mackan