對于這個分配,我必須從特定用戶回傳所有表中的列名,其中列名至少有 2 個元音,并且它的長度優于 8。不幸的是,我知道 sql 可以處理正則運算式我不知道它是否可以在這種情況下使用。
這是我希望我的請求執行的實際示例。
這是現有的表和列
| 表名 | 列名 |
|---|---|
| 人 | 鑒別 |
| 人 | 姓名 |
| 人 | 姓 |
| 城市 | 大陸 |
| 城市 | 國家 |
| 城市 | 姓名 |
| 城市 | 力量 |
這是請求的所需輸出
| 表名 | 列名 |
|---|---|
| 人 | 鑒別 |
| 人 | 姓 |
| 城市 | 大陸 |
我正在使用 Oracle DMBS。感謝您的時間
uj5u.com熱心網友回復:
使用的功能:
- 將更改字符從文本轉換為已識別的文本
- 將字串中的替換值從一個值替換為另一個值。
- 長度計算字串中的字符。
筆記:
- 由于您指出正則運算式可能無法使用...
- 我們使用 translate 洗掉所有將它們設定為特殊字符“~”的元音雖然我想我們可以只使用空格''。
- 翻譯不能是空字串,但替換可以。
- 翻譯中的“特殊”字符“~”因此,如果列名具有其中之一,則可能導致不正確的結果繞過它不能為空白的限制。
- 替換以消除特殊字符。
- 長度以確保我們洗掉了至少 1 個元音。
- 包含“Z”列,向您展示翻譯和替換正在做什么。
- 由于我們在資料上使用函式并受到更改資料的限制,因此無法使用索引,因此在性能方面并不理想。
演示請注意注釋以獲得更簡單的解決方案,該解決方案通過在翻譯中包含 ~ 來避免替換。
WITH CTE AS (SELECT 'Person' "Table name", 'identification' "Column name" from dual union all
SELECT 'Person','name' from dual union all
SELECT 'Person','last_name' from dual union all
SELECT 'City','continent' from dual union all
SELECT 'City','country' from dual union all
SELECT 'City','name' from dual union all
SELECT 'City','Strength' from dual)
SELECT "Table name", "Column name", replace(translate("Column name",'aeiou','~'),'~','') z
FROM CTE
WHERE length("Column name")-length(replace(translate("Column name",'aeiou','~'),'~',''))>=2
and length("Column name")>8
給我們:
------------ ---------------- ---------
| Table name | Column name | Z |
------------ ---------------- ---------
| Person | identification | dntfctn |
| Person | last_name | lst_nm |
| City | continent | cntnnt |
------------ ---------------- ---------
uj5u.com熱心網友回復:
我相信正則運算式可能會更優雅一些,但類似下面的內容會讓你進入球場:
SELECT * FROM yourtable WHERE regexp_like(ColumnName, '^.*[aeiou] .*[aeiou] .*$', 'i') and LENGTH(ColumnName) > 8
uj5u.com熱心網友回復:
這是一種方法:將單詞的長度與洗掉元音后的單詞長度進行比較。
with data as (
select 'outLOOK' as word from dual union all
select 'today' as word from dual union all
select 'help' as word from dual
)
SELECT word
FROM data
WHERE LENGTH (word)
- NVL ( LENGTH ( TRANSLATE ( word
, 'xAEIOUaeiou'
, 'x'
)
)
, 0
) >= 2
;
要么
with data as (
select 'outLOOK' as word from dual union all
select 'today' as word from dual union all
select 'help' as word from dual
)
SELECT word
FROM data
WHERE REGEXP_LIKE ( word
, '[AEIOUaeiou].*[AEIOUaeiou]'
);
這搜索
- 一個元音
- 任意數量的字符,0 或更多
- 另一個元音。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448738.html
