首先,視圖中的CAST(COLUMN_NAME爲CHAR(XX))和TO CHAR(COLUMN_NAME)之間的區別是什麼?Oracle 10g:CAST到數據類型CHAR會導致領先的空白?
我遇到的問題是我們正處於Oracle到SQL Server的轉換過程中,並且數據類型轉換對我們表的列是必需的。所以,我提出用投功能像這樣一個觀點:
CREATE OR REPLACE VIEW ARS_DMIS AS
SELECT
CAST (DMIS_TBL_ID AS CHAR(15)) "DMIS_TBL_ID",
CAST (PARENT_DMIS_CODE AS CHAR(4)) "PARENT_DMIS_CODE",
CAST (CHILD_DMIS_CODE AS CHAR(4)) "CHILD_DMIS_CODE",
CAST (SERVICE AS CHAR(15)) "SERVICE",
CAST (TYPE_FACILITY AS CHAR(10)) "TYPE_FACILITY",
CAST (UNIT_ORGANIZATION AS CHAR(60)) "UNIT_ORGANIZATION",
CAST (SITE AS CHAR(60)) "SITE",
CAST (LOCATION AS CHAR(60)) "LOCATION",
CAST (CITY AS CHAR(30)) "CITY",
CAST (STATE AS CHAR(2)) "STATE",
CAST (ZIP AS CHAR(10)) "ZIP",
CAST (DODAAC AS CHAR(10)) "DODAAC",
CAST (REGION AS CHAR(10)) "REGION",
CAST (CONUS AS CHAR(3)) "CONUS",
CAST (POC AS CHAR(30)) "POC",
CAST (POC_PHONE_NUMBER AS CHAR(20)) "POC_PHONE_NUMBER",
TO_CHAR (LAST_DATE, 'MM/DD/YYYY HH24:MI:SS') "LAST DATE",
CAST (LAST_USER AS CHAR(32)) "LAST_USER",
CAST (EMAIL AS CHAR(255)) "EMAIL",
CAST (INVENTORY_SITE AS CHAR(11)) "INVENTORY_SITE",
CAST (INVENTORY_REGION_ID AS CHAR(15)) "INVENTORY_REGION_ID",
CAST (ROWID AS CHAR(20)) "ROWID"
FROM ASSET_MGT.DMIS_TBL;
我用「TO_CHAR」唯一的實例是上的日期,因爲我需要更改日期也和鑄造的格式將不允許這樣做。
我將其餘的列轉換爲遷移到SQL Server的適當數據類型,並指定字符長度以匹配表中列的原始字符長度。但是我現在才發現,這樣做會導致空格一直跟蹤到指定的字符長度。我該如何防止這種情況發生?我知道我可以在視圖查詢內修剪它:
SELECT TRIM (TRAILING FROM DMIS_TBL_ID) "DMIS_TBL_ID" from ARS_DMIS_TBL
我不想走這條路,因爲這樣做對於所有的列將是耗時的。我起訴的演員功能錯了嗎?什麼是防止這些空白填充的最有效方法?
好吧,雖然SQL Server是後端數據庫,但前端BMC Remedy需要這些具體的數據類型被拉入查看窗體..有趣的是,所有被轉換爲CHAR的列主要是VARCHAR2,因爲他們說他們不能接受VARCHAR2作爲數據類型。lol – emvee 2014-09-23 19:29:45
@emvee - 如果目標數據類型是'CHAR',那麼根據定義,空格填充是必需的。如果你想避免空格填充,你需要使用寬度可變的數據類型。 – 2014-09-23 19:37:07