使用REGEXP_LIKE
SELECT t.*,
CASE
WHEN REGEXP_LIKE(column1, '^[0-9]+$') THEN 'Numeric'
ELSE 'Char'
END data_type
FROM table1 t;
没有它
SELECT t.*,
CASE
WHEN LENGTH(TRIM(TRANSLATE (column1, '0123456789',' '))) IS NULL THEN 'Numeric'
ELSE 'Char'
END data_type
FROM table1 t;
这是SQLFiddle演示
两个版本都可以根据需要进行调整以适应句点、加号和减号
更新NULL
正如@tbone 正确评论的那样,当 column1 的值为 时,这些查询不考虑s 并分别返回 'Char' 和 'Numeric' 作为 data_type NULL
。
如何处理它至少有两种选择:
首先NULL
,如果我们对它们不感兴趣,只需过滤掉具有值的行
...
WHERE column1 IS NOT NULL
Second Introduce NULL
(显然它可以是“N/A”或其他)数据类型CASE
SELECT t.*,
CASE
WHEN column1 IS NULL THEN NULL
ELSE CASE
WHEN REGEXP_LIKE(column1, '^[0-9]+$') THEN 'Numeric'
ELSE 'Char'
END
END data_type
FROM table1 t
这是更新的SQLFiddle演示