SQL Server istifadə edərək boş boşluqları null dəyərlərə çevirmək üçün necə?

Məndə bir masa var və bu masanındakı sütunlar bəzi qeydlər üçün boşluqlar içərisindədir. İndi məlumatları başqa bir masaya daşımaq və boşluqların NULL dəyəri ilə əvəz edilməsi lazımdır.

Istifadə etməyə çalışdım:

 REPLACE(ltrim(rtrim(col1)),' ',NULL) 

lakin işləməyəcək. Bütün col1 dəyərlərini NULL olaraq çevirir. Yalnız boşluqları olan NULL dəyərinə çevirmək istəyirəm.

29
13 сент. gözəl app seçin Sep 13 2010-09-13 18:23 '10 at 18:23 2010-09-13 18:23
@ 7 cavab

Bunu sınamadın mı?

 UPDATE table SET col1 = NULL WHERE col1 = '' 

ltrim() qeyd etdiyinə görə, siz ltrim() və ya rtrim() etmək lazım deyil və NULL sütunları '' uyğun deyil.

32
13 сент. Cavab 13 sentyabr egrunin verilir 2010-09-13 18:26 '10 at 18:26 2010-09-13 18:26

NULLIF funksiyasından istifadə edərək oxşar problemi həll etdim:

 UPDATE table SET col1 = NULLIF(col1, '') 
border=0

T-SQL köməkçisindən:

NULLIF, iki ifadə bərabər olmadıqda ilk ifadə qaytarır. Nümunələr bərabərdirsə, NULLIF birinci ifadə kimi null dəyərini qaytarır.

76
05 окт. cavab 05 oktyabr gecə verilir . 2012-10-05 11:49 '12 at 11:49 2012-10-05 11:49

SQL Server, simgeleri müqayisə edərkən arxasındakı boşluqları yox sayır, belə ki '' = ''. Yeniləmə üçün aşağıdakı istəkdən istifadə edin.

 UPDATE table SET col1 = NULL WHERE col1 = '' 

Tablonuzdaki NULL dəyərləri NULL olaraq qalacaq və boşluqdakı hər hansı bir ədəd olan col1s yalnız NULL olaraq dəyişdiriləcəkdir.

Bir cədvəldən digərinə kopyalayarkən bunu etmək istəyirsinizsə bunu istifadə edin:

 INSERT INTO newtable ( col1, othercolumn ) SELECT NULLIF(col1, ''), othercolumn FROM table 
19
20 сент. Bennor McCarthy tərəfindən verilmiş cavab Sep 20 2010-09-20 03:45 '10 saat 03:45 'da 2010-09-20 03:45

Məsələ bəyanat mənbə cədvəlindən seçərkən hiylə qurmalıdır:

 CASE WHEN col1 = ' ' THEN NULL ELSE col1 END col1 

Qeyd etmək lazımdır ki, LTRIM və RTRIM boşluğun boşluğundan ('') olan dəyəri azaldır (''). Məkanı aradan qaldırmaq lazımdırsa, o zaman iddianın bəyannaməsi müvafiq olaraq dəyişdirilməlidir:

 CASE WHEN LTRIM(RTRIM(col1)) = '' THEN NULL ELSE LTRIM(RTRIM(col1)) END col1 
7
13 сент. cavab craigh2 verildi 2 sentyabr 2010-09-13 18:30 '10 saat 18:30 'da 2010-09-13 18:30

Bu kod verilənlər bazasında hər bir masa və sütunda bunu əldə edə bilən bəzi SQL yaradır:

 SELECT 'UPDATE ['+T.TABLE_SCHEMA+'].[' + T.TABLE_NAME + '] SET [' + COLUMN_NAME + '] = NULL WHERE [' + COLUMN_NAME + '] = ''''' FROM INFORMATION_SCHEMA.columns C INNER JOIN INFORMATION_SCHEMA.TABLES T ON C.TABLE_NAME=T.TABLE_NAME AND C.TABLE_SCHEMA=T.TABLE_SCHEMA WHERE DATA_TYPE IN ('char','nchar','varchar','nvarchar') AND C.IS_NULLABLE='YES' AND T.TABLE_TYPE='BASE TABLE' 
7
19 марта '14 в 18:53 2014-03-19 18:53 cavab gls123 mart 19 '14 saat 18:53 'də verilir 2014-03-19 18:53

Bəlkə belə bir şey?

 UPDATE [MyTable] SET [SomeField] = NULL WHERE [SomeField] is not NULL AND LEN(LTRIM(RTRIM([SomeField]))) = 0 
6
13 сент. cavab 13 sentyabr tarixində 151323 istifadəçi tərəfindən verilir . 2010-09-13 18:26 '10 at 18:26 2010-09-13 18:26

Burada ya üçün müntəzəm ifadə.

 update table set col1=null where col1 not like '%[az,0-9]%' 

əslində hərf və ya nömrələri olmayan hər hansı bir sütunu tapır və onu null olaraq təyin edir. yalnız xüsusi simvol olan sütunlarınız varsa yeniləmə ola bilər.

-1
13 сент. Cavab DForck42 13 sep verilir . 2010-09-13 18:57 '10 at 18:57 2010-09-13 18:57

haqqında digər suallar tags və ya sual