验证存储在 VARCHAR2 列中的数据类型

问题描述 投票:0回答:1

我需要验证数据类型并标记它是数字还是日期。例如表中的数据如下所示:

COL_VALUE
----------          
'ABC',              
'123',              
'10/23/2024',       
'1/1/2025 10 PM'    
'1/2/2000 10:10:10', 
'100.23'            
'23,33,33.30'       

我需要输出类似:

COL_VALUE                 IS_NUMBER          IS_DATE
------------------------------------------------------------------
'ABC',                          N               N   
'123',                          Y               N
'10/23/2024',                   N               Y
'1/1/2025 10 PM'                N               Y
'1/2/2000 10:10:10'             N               Y
'100.23'                        Y               N   
'23,33,33.30'                   Y               N 

到目前为止,我已经尝试过

 VALIDATE_CONVERSION
功能,但是,我想知道是否有更好的方法来完成数据类型检查。

sql validation oracle12c
1个回答
0
投票

为了获得所需的输出,您可以使用 SQL 函数来验证 COL_VALUE 列中每个值的数据类型。这是使用 Oracle SQL 的方法:

SELECT 
    COL_VALUE,
    CASE 
        WHEN REGEXP_LIKE(COL_VALUE, '^\d+(\.\d+)?$') THEN 'Y'  -- Check if the value is a number
        ELSE 'N'
    END AS IS_NUMBER,
    CASE 
        WHEN REGEXP_LIKE(COL_VALUE, '^\d{1,2}/\d{1,2}/\d{4}(\s\d{1,2}:\d{2}(:\d{2})?)?$') THEN 'Y'  -- Check if the value is a date
        ELSE 'N'
    END AS IS_DATE
FROM 
    YOUR_TABLE;

此查询使用正则表达式来验证 COL_VALUE 列中的值是数字还是日期。

REGEXP_LIKE
函数检查值是否与指定模式匹配。如果匹配,则返回“Y”;否则,返回“N”。

请将

YOUR_TABLE
替换为包含 COL_VALUE 列的表的实际名称。此外,根据您的数据格式和要求,根据需要调整正则表达式模式。

© www.soinside.com 2019 - 2024. All rights reserved.