簡體   English   中英

刪除前導零

[英]Remove leading zeros

給定列中的數據如下所示:

00001 00
00026 00

我需要使用SQL來刪除空格后面的任何內容以及值中的所有前導零,以便最終輸出為:

1
26

我該怎么做才能做到最好?

順便說一下,我正在使用DB2

這是在DB2 for Linux / Unix / Windows和z / OS上測試的。

您可以使用DB2中的LOCATE()函數來查找字符串中第一個空格的字符位置,然后將其作為結束位置(減1)發送到SUBSTR() )以僅獲取字符串的第一個數字。 轉換為INT將刪除前導零,但如果您需要以字符串形式,則可以再次CASTCHAR

SELECT CAST(SUBSTR(col, 1, LOCATE(' ', col) - 1) AS INT)
FROM tab

在DB2(Express-C 9.7.5)中,您可以使用SQL標准TRIM()函數:

db2 => CREATE TABLE tbl (vc VARCHAR(64))
DB20000I  The SQL command completed successfully.
db2 => INSERT INTO tbl (vc) VALUES ('00001 00'), ('00026 00')
DB20000I  The SQL command completed successfully.
db2 => SELECT TRIM(TRIM('0' FROM vc)) AS trimmed FROM tbl

TRIMMED                                                         
----------------------------------------------------------------
1                                                               
26                                                              

  2 record(s) selected.

內部TRIM()刪除前導和尾隨零字符,而外部修剪刪除空格。

這在AS400 DB2上對我有用。 “L”代表領導。 您也可以使用“T”進行追蹤。

在此輸入圖像描述

我假設字段類型當前是VARCHAR ,你需要存儲除INT之外的東西嗎?

如果字段類型為INT ,則會自動刪除它們。

或者,選擇值:

SELECT (CAST(CAST Col1 AS int) AS varchar) AS Col1

我出於某種原因找到了這個帖子,發現沒有人真正回答這個問題很奇怪。 似乎目標是返回左側調整后的字段:

SELECT 
       TRIM(L '0' FROM SUBSTR(trim(col) || ' ',1,LOCATE(' ',trim(col) || ' ') - 1))
  FROM tab

一個選項是隱式轉換: SELECT SUBSTR(column, 1, 5) + 0 AS column_as_number ...

這假定結構是nnnnn nn ,即恰好5個字符,一個空格和兩個以上的字符。

顯式轉換,即SUBSTR(列,1,5):: INT也是一種可能性,但確切的語法取決於所討論的RDBMS。

當空間位置可變時,或者即使它已修復並且您想要進行更強大的查詢(如果它稍后移動),請使用以下內容來實現此目的:

SELECT CAST(SUBSTR(LTRIM('00123 45'), 1, CASE WHEN LOCATE(' ', LTRIM('00123 45')) <= 1 THEN LEN('00123 45') ELSE LOCATE(' ', LTRIM('00123 45')) - 1 END) AS BIGINT)

如果您知道該列在開始后將始終包含空格:

SELECT CAST(LOCATE(LTRIM('00123 45'), 1, LOCATE(' ', LTRIM('00123 45')) - 1) AS BIGINT)

這兩個導致:

123

所以你的查詢會

SELECT CAST(SUBSTR(LTRIM(myCol1), 1, CASE WHEN LOCATE(' ', LTRIM(myCol1)) <= 1 THEN LEN(myCol1) ELSE LOCATE(' ', LTRIM(myCol1)) - 1 END) AS BIGINT)
FROM myTable1

這將刪除第一個空格字符后面的任何內容(忽略前導空格),然后將余數轉換為64位整數,然后刪除所有前導零。

如果您想保留所有數字,只需刪除前導零和任何可以使用的空格:

SELECT CAST(REPLACE('00123 45', ' ', '') AS BIGINT)

雖然我的答案可能看起來相當簡單,只比SELECT CAST(SUBSTR(myCol1, 1, 5) AS BIGINT) FROM myTable1但它允許空格字符並不總是在那里, myCol1值不是nnnnn nn形式的情況nnnnn nn如果字符串是nn nn則轉換為int將失敗。

如果使用TRIM函數刪除前導零,請務必小心,實際上在所有情況下,您都需要使用00120 00等數據測試代碼,並查看它是否返回12而不是正確的值120

暫無
暫無

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

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