मेरे पास निम्न स्थिति है (कृपया डमी डेटासेट चलाएं), जिससे FS_Number में सही FS_Numbers, NULL और रैंडम टेक्स्ट है, जैसे N/A_ADMINIS2 इसे FS_Number1 के मानों से बदलने की आवश्यकता है

SELECT 1 AS ID, 214565 AS FS_Number1, Null AS  FS_Number
UNION
SELECT 2 AS ID, null   AS FS_Number1, '759843' AS  FS_Number
UNION
SELECT 3 AS  ID, null   AS FS_Number1, '243545' AS  FS_Number
UNION
SELECT 4 AS ID, null   AS FS_Number1, '655342' AS  FS_Number
UNION
SELECT 5 AS ID, 897324 AS FS_Number1, 'N/A_ADMINIS2' AS  FS_Number
UNION
SELECT 6 AS  ID, 934895 AS FS_Number1, 'N/A_ADMINIS2' AS  FS_Number
UNION
SELECT 7 AS ID, 3453 AS FS_Number1, Null AS  FS_Number
UNION
SELECT 8 AS ID, 85634542 AS FS_Number1, 'N/A_3' AS  FS_Number
UNION
SELECT 9 AS  ID, 3451124 AS FS_Number1, 'N/A_1' AS  FS_Number

इस तरह दिखता है:

ID  FS_Number1  FS_Number
1   214565      NULL
2   NULL        759843
3   NULL        243545
4   NULL        655342
5   897324      N/A_ADMINIS2
6   934895      N/A_ADMINIS2
7   3453        NULL
8   85634542    N/A_3
9   3451124     N/A_1

परिणाम इस तरह दिखना चाहिए:

SELECT 1 AS ID, 214565 AS FS_Number1, '214565' AS  FS_Number
UNION
SELECT 2 AS ID, null   AS FS_Number1, '759843' AS  FS_Number
UNION
SELECT 3 AS  ID, null   AS FS_Number1, '243545' AS  FS_Number
UNION
SELECT 4 AS ID, null   AS FS_Number1, '655342' AS  FS_Number
UNION
SELECT 5 AS ID, 897324 AS FS_Number1, '897324' AS  FS_Number
UNION
SELECT 6 AS  ID, 934895 AS FS_Number1, '934895' AS  FS_Number
UNION
SELECT 7 AS ID, 3453 AS FS_Number1, '3453' AS  FS_Number
UNION
SELECT 8 AS ID, 85634542 AS FS_Number1, '85634542' AS  FS_Number
UNION
SELECT 9 AS  ID, 3451124 AS FS_Number1, '3451124' AS  FS_Number

इस तरह दिखता है:

ID  FS_Number1  FS_Number
1   214565      214565
2   NULL        759843
3   NULL        243545
4   NULL        655342
5   897324      897324
6   934895      934895
7   3453        3453
8   85634542    85634542
9   3451124     3451124

मुझे पता है कि आप COALESCE के साथ NULL मानों को प्रतिस्थापित कर सकते हैं, लेकिन मेरे मामले में मेरे पास टेक्स्ट भी है जिसे किसी संख्या से प्रतिस्थापित करने की आवश्यकता है। इसे करने का बेहतरीन तरीका क्या है?

0
Anna 15 सितंबर 2020, 01:38

2 जवाब

सबसे बढ़िया उत्तर

आप इसे try_convert() के साथ कर सकते हैं:

select id, fs_number1,
    case when try_convert(int, fs_number) is null
        then fs_number1
        else fs_number
    end as fs_number
from mytable

विचार यह है कि मान को किसी संख्या में बदलने का प्रयास किया जाए। यदि रूपांतरण प्रयास null लौटाता है, तो इसका अर्थ है कि स्ट्रिंग या तो संख्यात्मक नहीं है, या null: उस स्थिति में हम वैकल्पिक मान का उपयोग करते हैं।

DB Fiddle पर डेमो:

id | fs_number1 | fs_number
-: | ---------: | --------:
 1 |     214565 |    214565
 2 |       null |    759843
 3 |       null |    243545
 4 |       null |    655342
 5 |     897324 |    897324
 6 |     934895 |    934895
 7 |       3453 |      3453
 8 |   85634542 |  85634542
 9 |    3451124 |   3451124
1
GMB 15 सितंबर 2020, 01:42

यह GMB के संस्करण के समान है, लेकिन केस के बजाय कोलेस का उपयोग करता है।

select id, fs_number1,
    coalesce(try_convert(int, fs_number), fs_number1) as fs_number
from mytable
0
Moe Sisko 15 सितंबर 2020, 08:29