Sql 主要是数字范围

Sql 主要是数字范围,sql,oracle,coldfusion,Sql,Oracle,Coldfusion,我正在使用ColdFusion访问Oracle数据库中的一列,并希望选择一系列项 该列大部分为数字,但在数字末尾包含一些字母。 样本数据:55、56、570、571、572、573、574、575、576、577、578、579、57A、57580、581、582、583、583、583、584、585、586、587、588、589、58、59 我想 select .... where filenumber >= '57' and filenumber <= '59' 选择。。。

我正在使用ColdFusion访问Oracle数据库中的一列,并希望选择一系列项

该列大部分为数字,但在数字末尾包含一些字母。 样本数据:55、56、570、571、572、573、574、575、576、577、578、579、57A、57580、581、582、583、583、583、584、585、586、587、588、589、58、59

我想

select .... where filenumber >= '57' and filenumber <= '59'

选择。。。。如果filenumber>='57'和filenumber,则可以使用正则表达式仅获取数字,如下所示:

SELECT ....
WHERE REGEXP_LIKE(filenumber, '^[[:digit:]]+$') >= '57'
AND REGEXP_LIKE(filenumber, '^[[:digit:]]+$') <= '59'

您可以使用正则表达式仅获取数字,如下所示:

SELECT ....
WHERE REGEXP_LIKE(filenumber, '^[[:digit:]]+$') >= '57'
AND REGEXP_LIKE(filenumber, '^[[:digit:]]+$') <= '59'

明白了!我必须提到@MrSlayer,因为它指出Oracle支持Regex(不幸的是,
REGEXP\u LIKE()
返回一个布尔结果,这并没有完全的帮助)

可以这样做:

SELECT fileNumber
FROM File_Transfer
WHERE TO_NUMBER(REGEXP_SUBSTR(filenumber, '^(\d+)(\D*)$', 1, 1, 'x', 1)) >= 57
AND TO_NUMBER(REGEXP_SUBSTR(filenumber, '^(\d+)(\D*)$', 1, 1, 'x', 1)) < 60
选择文件编号
从文件传输
其中TO_编号(REGEXP_SUBSTR(文件编号“^(\d+)(\d*)$”,1,1,'x',1))>=57
和TO_NUMBER(REGEXP_SUBSTR(文件号“^(\d+)(\d*)$”,1,1,'x',1))<60
(我也有一把SQL小提琴。)


这是假设您在Oracle11下运行,尽管您可能能够将其调整为10中的等效值(10缺少最终参数,它只返回数字部分)。这还假设您已经将文件号作为开始的数字,但是如果需要,转换起来应该不会太困难。当然,总是喜欢“下限包含,上限独占”形式的范围(并且避免像瘟疫一样的
之间的

明白了!我必须提到@MrSlayer,因为它指出Oracle支持Regex(不幸的是,
REGEXP\u LIKE()
返回一个布尔结果,这并没有完全的帮助)

可以这样做:

SELECT fileNumber
FROM File_Transfer
WHERE TO_NUMBER(REGEXP_SUBSTR(filenumber, '^(\d+)(\D*)$', 1, 1, 'x', 1)) >= 57
AND TO_NUMBER(REGEXP_SUBSTR(filenumber, '^(\d+)(\D*)$', 1, 1, 'x', 1)) < 60
选择文件编号
从文件传输
其中TO_编号(REGEXP_SUBSTR(文件编号“^(\d+)(\d*)$”,1,1,'x',1))>=57
和TO_NUMBER(REGEXP_SUBSTR(文件号“^(\d+)(\d*)$”,1,1,'x',1))<60
(我也有一把SQL小提琴。)


这是假设您在Oracle11下运行,尽管您可能能够将其调整为10中的等效值(10缺少最终参数,它只返回数字部分)。这还假设您已经将文件号作为开始的数字,但是如果需要,转换起来应该不会太困难。当然,总是喜欢“下限包含,上限独占”形式的范围(并避免像瘟疫一样的
介于
之间)。

Regex可能是您通过一个查询来实现这一点的最佳选择。其他任何操作都需要多个步骤,并且可能会留下空白。在与测试用例进行比较之前,您可能希望使用to_NUMBER将数字的字符串表示形式转换为数字。即在正则表达式之后但在测试之前。抱歉,您使用的是类似于正则表达式的正则表达式,而不是正则表达式替换。就我个人而言,我会用replace只留下数字,然后再给它们编号。不过,我关于比较数字字符串的观点仍然是相关的。Regex可能是通过一个查询进行比较的最佳选择。其他任何操作都需要多个步骤,并且可能会留下空白。在与测试用例进行比较之前,您可能希望使用to_NUMBER将数字的字符串表示形式转换为数字。即在正则表达式之后但在测试之前。抱歉,您使用的是类似于正则表达式的正则表达式,而不是正则表达式替换。就我个人而言,我会用replace只留下数字,然后再给它们编号。不过,我关于比较数字字符串的观点仍然相关。因此,具体来说,您只需要数字为两位数(“输入”的长度)的行,再加上任意数量的非数字字符?数字57可以是任意数量的数字。有时,文件被拆分为多个文件,其中包含a、B、C。。。附加到文件号,我不希望这些字母从我的范围结果中排除这些文件;我的意思是,您只想包括
fileNumber
与输入条件具有相同位数(并且在给定范围内)的行。包含非数字数据的行只是“奖金”。是的,570将被排除在外,但57A不会。因此,具体来说,您只需要数字为两位数(“输入”的长度)的行,加上任意数量的非数字字符?数字57可以是任意数量的数字。有时,文件被拆分为多个文件,其中包含a、B、C。。。附加到文件号,我不希望这些字母从我的范围结果中排除这些文件;我的意思是,您只想包括
fileNumber
与输入条件具有相同位数(并且在给定范围内)的行。包含非数字数据的行只是“奖金”。是的,570将被排除在外,但57A不会。谢谢。我是在@MrSlayer的帮助下朝这个方向走的。谢谢。我在@MrSlayer的帮助下朝这个方向前进。