抱歉,我知道這個問題之前已經被問過了,但我嘗試了之前建議的方法,都沒有解決我的問題。
我正試圖比較兩個資料庫中的一個表。
COLUMN_VALUE
01.00^01.13
01.00 01.12
01.00 01.15
不幸的是,該表沒有一個主鍵,所以我試圖按同一列排序,并通過這種方式進行比較。
當我在Oracle中對上述表進行排序時,它的排序結果是:
SELECT * FROM (
SELECT '01.00 01.12' AS "COLUMN_VALUE" FROM DUAL
UNION ALL
SELECT '01.00^01.13' AS "COLUMN_VALUE" FROM DUAL
UNION ALL
SELECT '01.00 01. 15' AS "COLUMN_VALUE" FROM DUAL) ORDER BY 1;
COLUMN_VALUE
01.00 01.12; COLUMN_VALUE
01.00 01.15
01.00^01.13
但是,當我在Postgres中執行排序時,它的排序結果是:
SELECT * FROM (
SELECT '01.00 01.12' AS "COLUMN_VALUE"
UNION ALL
SELECT '01.00^01.13' AS "COLUMN_VALUE"
UNION ALL
SELECT '01.00 01. 15' AS "COLUMN_VALUE") T1 ORDER BY 1;
COLUMN_VALUE
01.00 01.12; COLUMN_VALUE
01.00^01.13
01.00 01.15
這個問題似乎是關于^字符的排序方式。有沒有人知道一個解決方法,使兩個資料庫以同樣的方式對資訊進行排序?
uj5u.com熱心網友回復:
創建哈希值并使用它們進行排序似乎是一個選擇。
測驗表(Postgresql/Oracle)
查詢(Postgresql)--按MD5哈希值排序
select c_, md5( c_ )
from test
order by 2 ;
-- result
c_ md5
01.00 01.12 335dca42dedecedc19ba65065a7777ec
01.00^01.13 4e1661df191eb006274be5552a998280
01.00 01.15 c1197d14549263a867fd9850f42b68b1
查詢(Oracle)-按MD5哈希值排序
select c_, standard_hash( c_ , 'MD5'_span> )
from test
order by 2 ;
C_ STANDARD_HASH(C_,'MD5'/span>)
01.00 01.12 0x335DCA42DEDECEDC19BA65065A7777EC<
01.00^01.13 0x4E1661DF191EB006274BE5552A998280
01.00 01.15 0xC1197D14549263A867FD9850F42B68B1
如果MD5不夠好,你也可以使用SHA256,這可能會給你一個不同的排序,但對Postgresql和Oracle來說,排序結果是一樣的。 DBfiddle上的例子,對于Postgresql 12和Oracle 18c。
uj5u.com熱心網友回復:
Postgres:
SELECT * FROM (
SELECT '01.00 01.12' AS "COLUMN_VALUE"
UNION ALL
SELECT '01.00^01.13' AS "COLUMN_VALUE"
UNION ALL
SELECT '01.00 01. 15' AS "COLUMN_VALUE") T1 ORDER BY "COLUMN_VALUE" COLLATE "C"。
COLUMN_VALUE
--------------
01.00 01.12
01.00 01.15
01.00^01.13
(3 rows)
我知道這個問題之前已經被問過了,但是嘗試了之前建議的方法,都沒有解決我的問題。
好吧,答案就在"order by "子句中的不同行為。Oracle與PostgreSQL的對比
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332510.html
標籤:


