iT邦幫忙

0

RIGHT函數的用法?

XYZ 2019-04-10 10:10:375197 瀏覽
  • 分享至 

  • xImage

RIGHT('0' + CONVERT(VARCHAR(3), SUBSTRING(DATAALL, 1, 4) - 1911), 3),請問
RIGHT('0'是什麼意思?
為何字串可以減1911?

那個字串會隱轉成數字型態,減完1911後~再把數字型態轉回文字型態,補0取3位數→得到民國年的資料
ant1017 iT邦新手 2 級 ‧ 2019-04-10 10:46:53 檢舉
1. 0大概只是想統一長度而已,你可以拿掉看一下
2. (西元年分)-1911=(民國年分)
小魚 iT邦大師 1 級 ‧ 2019-04-10 10:57:20 檢舉
Excel會根據情況自動轉換文字成為數字,
所以可以直接減,
但是遇到無法轉換的時候就會回傳錯誤.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
allenlwh
iT邦高手 1 級 ‧ 2019-04-10 10:16:36
最佳解答

左邊補0

RIGHT('0'是什麼意思?

Select RIGHT(REPLICATE('0', 8) + CAST('12345' as NVARCHAR), 8) as '左邊補零'
, LEFT(CAST('12345' as NVARCHAR) + REPLICATE('0', 8), 8) as '右邊補零'
allenlwh iT邦高手 1 級 ‧ 2019-04-10 10:21:35 檢舉

我想應該是要統一民國年的位數為3位數

declare @DATAALL varchar(4) 
set @DATAALL='2019'
select RIGHT('0' + CONVERT(VARCHAR(3), SUBSTRING(@DATAALL, 1, 4) - 1911), 3)
===>108
set @DATAALL='2000'
select RIGHT('0' + CONVERT(VARCHAR(3), SUBSTRING(@DATAALL, 1, 4) - 1911), 3)
===>089
0
張小馬~
iT邦新手 3 級 ‧ 2019-04-10 15:58:35

RIGHT:從右邊數過來取幾個字
LEFT:從左邊數過來取幾個字
SUBSTRING:從左邊數過來的第幾位開始取,往右取幾個字。

循序漸進,把每一步拆開來就知道在幹嘛囉~

MS SQL

看來是補0:
https://ithelp.ithome.com.tw/upload/images/20190410/201115666LOO38RvJs.png
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=a32c7ddfb2f2fd6a16bfc0d4a5252622

select
                                       DATAALL                ,
                             SUBSTRING(DATAALL,1,4)          a,
                             SUBSTRING(DATAALL,1,4)-1911     b,
          CONVERT(VARCHAR(3),SUBSTRING(DATAALL,1,4)-1911)    c,
      '0'+CONVERT(VARCHAR(3),SUBSTRING(DATAALL,1,4)-1911)    d,
RIGHT('0'+CONVERT(VARCHAR(3),SUBSTRING(DATAALL,1,4)-1911),3) e
from ithelp_mssql_20190410

其實SUBSTRING(DATAALL,1,4)可以寫成LEFT(DATAALL,4)就好......


PostgreSQL

至於你說為啥字串可以拿來加減乘除,像MS SQL系統背後會自己偷轉成數字,但Postgre就不行~必須先轉成數字(如下舉例是轉成整數INT),要拿來補0也必須再轉回文字(TEXT)。
https://ithelp.ithome.com.tw/upload/images/20190410/20111566425xGlX8mC.png
https://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=676e137412f398997c50bd74309db86b
是說這種補0我比較習慣用判斷字串長度去補,反正只會有2或3兩種可能嘛~

我要發表回答

立即登入回答