我的桌子上有一个NVARCHAR字段。 (使用Oracle 11g)
我想检查它是否有char数据或数字数据。
帮我写一个选择查询。 (使用PL-SQL)
我想我可以用case编写它,但我无法实现它。 (我没有检查isChar和isNumber的方法)
select
case <myField>
when <isChar> then
<this is a char data>
when <IsNum> then
<this is number data>
End
from <myTable>
答案 0 :(得分:3)
使用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 演示
如果需要,可以调整两个版本以适应期间,加号和减号
更新正如@tbone正确评论这些查询不会考虑NULL
并且当column1的值为{{时,分别将'Char'和'Numeric'作为data_type返回1}}。
至少有两种选择如何处理它:
首先如果我们对它们不感兴趣,只需过滤出NULL
个值的行
NULL
第二次在...
WHERE column1 IS NOT NULL
NULL
(显然可以是“N / A”或其他内容)数据类型
CASE
此处已更新 SQLFiddle 演示
答案 1 :(得分:1)
试试这个SQL。我假设在case语句中有字符数据。
select case <myField>
when (ascii(char)>=65 and ascii(char)<=90) OR (ascii(char)>=97 and ascii(char)<=122)
then
<this is a char data>
when ascii(char)>=48 and ascii(char)<=57
then
<this is number data>
End
from <myTable>
希望这有帮助。