SQL查询前两个数值是字母的列,比如TC0001,TC0002,0056,3396,48454.......

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL查询前两个数值是字母的列,比如TC0001,TC0002,0056,3396,48454.......相关的知识,希望对你有一定的参考价值。

ID NUM
1 TC0001
2 TC0002
3 00666
4 69521
5 HK6549
...............

把NUM前面两位是字母的找出来.

数据库是IBM DB2

参考技术A wzsjzjjxy的回答,应该有一个转化表达式的函数吧?另外这个是不是在老版本的数据库没有啊?
woshifotuo,asciistr(SUBSTRING(SUM,1,1)) not like '\%' ,这个语法只能判断是以非汉字开头,而不能判断是以字母开头。如果是以数字开头,也会查询出来的。
我觉得应该用ASCII码的范围来限制合适。

select *
from TABLE
where ((ASCII(SUBSTR(NUM,1,1)) between 97 and 122) OR (ASCII(SUBSTR(NUM,1,1)) between 65 and 90))
AND (ASCII(SUBSTR(NUM,2,1)) >=97 and ASCII(SUBSTR(NUM,2,1))<=122 OR ASCII(SUBSTR(NUM,2,1)) between 65 and 90)
分别判断第一位和第二位的ASCII码,65-90是大写的A-Z, 97-122是小写的a-z
以上SUBSTR是ORACLE函数,如果SQLSERVER,请用SUBSTRING

DB2字符串截取的函数也是SUBSTR
参考技术B 试看下面的语句
select *
from table
where (Left(NUM, 1) >='A' and Left(NUM, 1) <= 'Z' Or Left(NUM, 1) >='a' and Left(NUM, 1) <= 'z')
and (Substring(NUM, 2, 1) >='A' and Substring(NUM, 2, 1) <= 'Z' Or Substring(NUM, 2, 1) >='a' and Substring(NUM, 2, 1) <= 'z')
参考技术C 只是选择出NUM前面两位是字母的列
SELECT NUM
FROM TableName
WHERE isnumeric(NUM) = 0
参考技术D select ID,SUM from tableName where asciistr(SUBSTRING(SUM,1,1)) not like '\%' and SUM(SUBSTRING(SUM,2,1)) not like '\%' 第5个回答  2011-03-30 select * from tablename where num like '[A-Z][A-Z]%'追问

select * from tablename where num like 'AA%'
这样就可以

select * from tablename where num like '[A-Z][A-Z]%'
这样不行啊.

追答

你是什么数据库?sqlserver的话是可以的。[a-z]表示字母abcd.....z中任意一个字母。

追问

数据库是DB2的。

追答

DB2就不知道了。

oracle sql查询以获取没有空格的列值

【中文标题】oracle sql查询以获取没有空格的列值【英文标题】:oracle sql query to get column values without space 【发布时间】:2013-05-16 17:35:26 【问题描述】:

我正在尝试运行查询以从表中的列中选择值,该列中的数据在特定位置没有空间。即前两个位置。

Select test_col from A where SUBSTR(test_col, 0 ,2) <> ' '

到目前为止,它返回的列的开头两个位置有空格。

任何建议。

例子:

test_col
  Quick Brown Fox
Black Sheep
  This a test
Mary had a little lamb

所以查询应该返回 Black SheepMary 有一只小羊

【问题讨论】:

您需要详细说明。您能否展示一些示例数据以及输出的样子? 通过示例进行更新。 设置sqlfiddle 也很有帮助。 test_colVARCHAR 还是 CHAR 列? 【参考方案1】:

您的索引应该从 1 而不是 0 开始,我更喜欢 Trim 并检查 null 而不是检查数据中的空间。试试这个

Select test_col from A where Trim(SUBSTR(test_col, 1 ,2)) IS NOT NULL

【讨论】:

【参考方案2】:

Oracle 10g 及更高版本:

SELECT test_col FROM a WHERE REGEXP_LIKE(test_col, '^[^ ]2.*$'); 

这里是SQL Fiddle

【讨论】:

感谢它给出了无效关系运算符 ora-00920 的错误 很抱歉。应该测试过了给我一些,我会解决的。 感谢它现在可以使用。正确答案不止一个。由于您提供了 sql fiddle。所以我接受你的回答。感谢每一个人的帮助和时间。【参考方案3】:
select test_col 
  from A 
 where SUBSTR(test_col, 1, 1) <> ' '
   and SUBSTR(test_col, 2, 1) <> ' ';

或者(甚至更好)

select test_col 
  from A 
 where INSTR(SUBSTR(test_col, 1, 2), ' ') = 0;

【讨论】:

【参考方案4】:

字符串的第一个位置索引是 1,而不是 0(尽管 SUBSTR() treats it as 1)并且您只是在测试 一个 空间:

select test_col from A where SUBSTR(test_col, 1, 2) <> '  '

【讨论】:

我之前尝试过使用索引 (1,2) 它返回在这两个位置有空格的数据。 您正在检查 one 空间,虽然@Nomad,而不是 two 你是对的,谢谢。但如果我将索引更改为 1,3 而不是 1,2 等,结果相同。 感谢 Ben 的回答和帮助。 当然@Nomad,如果你要测试3个空格,你必须检查它是否不等于3个空格!

以上是关于SQL查询前两个数值是字母的列,比如TC0001,TC0002,0056,3396,48454.......的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql查询以获取没有空格的列值

sql怎么把一个表的一列替换到对应的另一个表中对应的列?

如何通过SQL查询检查列的数值是不是包含字母

SQL:一个表多列模糊查询

delphi下的cxgrid的列值转换问题

sql插入的列数不确定怎么办