簡體   English   中英

檢查varchar2中的數字是否大於n

[英]Check if number in varchar2 is greater than n

我有一個Varchar2字段,該字段通常包含兩個字母字符(例如ZHSZAI ,...)。 我們稱之為FOO

某些數據集將AA1 - A9保存到同一字段中。 我需要選擇除那些行外的所有行。 我使用函數substr數字A分開。 到目前為止, <>似乎不能與“ number-string”一起正常使用。

如何在不將其轉換為數字的情況下實現這一目標? 有沒有更簡單的解決方案?

我沒有在互聯網上找到任何東西,我自己嘗試達到了極限。

到目前為止,這是我的WHERE子句

WHERE (substr(FOO, 0, 1) != 'A'
 or (substr(FOO, 0, 1) = 'A' AND substr(FOO, 1, 1) > '9'));

它不受限制地返回所有行。

我發現的唯一解決方案:

WHERE (FOO NOT IN ('A', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9'));

但這不是最佳的,如果將來某個地方會有A1 - A50 我必須在WHERE子句中添加51個字符串。 而且,由於查詢是在源代碼中進行的,因此代碼的可讀性也會變差。

該解決方案應在ORACLE SQL Server上運行。 提前致謝

(substr(FOO, 0, 1) = (substr(FOO, 1, 1) -Oracle以1(非0)開始。

因此,您應該使用substr(FOO, 2, 1)獲得第二個符號。

但是,它不能在具有SUBSTRING(而非SUBSTR)的SQL Server中工作。

如果您准備在不同的數據庫中使用不同的方法,則還可以嘗試使用正則表達式:

甲骨文

where not regexp_like(foo, '^A[1-9]{1,3}$')

^字符串的開頭
$字符串結尾
[1-9] 1到9之間的任何數字
{1,3}重復上一個表達式1,2或3次

匹配/不匹配'^A[1-9]{1,3}$' a123的FOO的示例-可能匹配/可能不匹配(取決於有關大小寫敏感性的NLS設置)
A123匹配(第一個符號為“ A”,其他符號為3位數字)
A123b不匹配(最后一個符號應該是一個數字)
A1234不匹配(結尾應為1,2或3位數字)
A12比賽
A1比賽

SQL服務器
SQL Server T-SQL中的REGEXP_LIKE轉換

如果您的要求是僅包括'A'以外的所有字母值,請考慮使用LIKE表達式,以便它可與任何符合ANSI的DBMS一起使用:

WHERE FOO <> 'A' AND FOO NOT LIKE '%[^A-Z]%' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM