2015-09-04 18 views
5

Bir karakter numarası veya boş dizesi olan LIKE yan tümcesine sahip olmak mümkün mü?T-SQL LIKE numarası veya boş dize köşeli parantez içinde nasıl oluşturulur?

Bunun aptalca geleceğini biliyorum ve yapamayacağından neredeyse eminim ama soracağım.

LIKE yan tümcesi (dize olarak) yazacağım bir alanım var. Daha sonra WHERE yan tümcesinde ifade edeceğim: ... LIKE tableX.FormatField .... Numara içermelidir (tek karakter veya boş dize).

[0-9 ] gibi bir şey. Köşeli parantez içindeki boşluk çubuğu boş dize anlamına gelir.

DÜZENLEME:

Gayet iyi açıklamaz düşünüyorum. DataFormat alanlı TblParam - parametreleri için bir yapılandırma var bir tablo var. ValueToCheck alanıyla başka bir tablodan TblValue değerini doğrulamak zorundayım. Doğrulama, bir sorgu tarafından yapılır. Ben 1 sayısal karakter veya boş dize için ifadesini ihtiyaç yapılandırma değer için

... WHERE TblValue.ValueToCheck LIKE TblParam.DataFormat ...

: gibi doğrulama için parça görünüyor. [0-9''] gibi bir şey. Çekin otomatik yapısı nedeniyle sorguya uyan tek bir ifadeye (AND VEYA OR işleçler olmadan) ihtiyacım var (yukarıdaki örneğe bakınız). Aynı çek, diğer çek tiplerinde de geçerlidir, bu yüzden kontrol motoruma uymalıyım.

[0-9'']'u kullanamayacağından emindim ama başka birinin uygun bir çözümü olup olmadığını soruyorum.Aslında, sürüm dizesini doğrulamakta zorlandığım: 1.0.1.2 veya 1.0.2. 2-3 nokta (.) ve sayı içerebilir.

+1

gibi '[0-9]' burada çalışıyor. Belki de ben anlamadım. – Clay

+0

Denemeyi beğendiniz mi? Boşluk boş dize ile aynı değildir. – Paparazzi

+0

Sadece, @Frisbee'ye ihtiyacım olan ifadeyi göstermeye çalışıyorum. [0-9 ''] '(tek haneli veya boş bir dize) gibi bir şeye ihtiyacım var ama bunun işe yaramayacağını biliyorum. –

cevap

1

Oldukça emin o kadar mümkün değildir 'hatta bir karakter değildir

seçme ASCII ('') ; null

'' = ''; true

'' is null; İsterseniz tam 0-9 (benzeri daha etkilidir olarak)
o zaman bu
gibi bir şey yapmak '' (ve ' ')
nerede col içinde (' 1'

yanlıştır, '2', '3', '4', '5', '6', '7', '9', '0') veya (col = '' ve DATALENGTH (col) = 0)

+0

Evet, fakat benim yapmam gereken 'TblParam.DataFormat '. Cevabınız iyi ama ben uyumuyorum. Bu durumda birkaç sütuna ihtiyacım olacak - kontrol için bazı ortak modelleri bulmaya çalışıyorum. Filtre çok karmaşık hale gelirse - hiçbir faydası olmayacaktır. –

+0

İstemek ve almak aynı şey değildir. '' null - bir karakter değil – Paparazzi

+0

Katılıyorum - boş sokma bir karakter değil. Sadece bir çözüm olup olmadığını kontrol ediyorum, hatta öyle olmadığını düşünüyorum. –

1

Bu zor bir şey ... Anlayabildiğim kadarıyla sadece bir tane gibi bir yolla yapmanın bir yolu yoktur ... like '[0-9]' OR like '' yapmalısınız. Bunu, ikinci bir sütuna sahip olarak yapabilirsiniz. TableX Bu, ikinci bir deseni belirtir ya da boşluk içerip içermeyeceğini belirtir

+0

Doğru bir şekilde anlıyorsunuz. Sanırım bir seçenek yok, ama sadece bilmiyorum diye sormaya karar verdim. –

1

Sorunuzu doğru anlıyorsam boş dizeyi yakalayan bir şeye ihtiyacınız vardır. NULLIF() işlevini kullanmayı deneyin: tam üç kayıtları

create table t1 (a nvarchar(1)) 
insert t1(a) values('') 
insert t1(a) values('1') 
insert t1(a) values('2') 
insert t1(a) values('a') 
-- must select first three 
select a from t1 where a like '[0-9]' or nullif(a,'') is null 

İade: 1 ', '' ve '2'.

Güncelleme: tek aralık maddesi ile daha rahat yöntem Bulunan :

select a from t1 where isnull(nullif(a,''),0) like '[0-9]' 
+0

Güncellenmiş yapınızı beğeniyorum ve oylarım. Tek bir yapıya ihtiyacım var, bu yüzden ihtiyacım olan cevap değil, ama nerede bulunduğunuz, bakış açımdan iyidir. –

İlgili konular