顯示具有 資料淨化 標籤的文章。 顯示所有文章
顯示具有 資料淨化 標籤的文章。 顯示所有文章

2018年5月23日 星期三

以另存新表來簡化資料存取語法

有些表格通常只有代碼,為了取得名稱,需要先串接代碼以取得名稱,而串接語法往往造成SQL中包含冗長的串接語法,去處理代碼化名稱的動作,為了簡化資料存取語法,應先將串接代碼取得名稱的SQL結果另存成新表,可簡易運用以下 SQL達成:

create table new_table as select ... from old_table

釋例:

原本取代碼的 SQL:

select a.*, b.名稱 as 科目名稱
from 明細分類帳 a, 基本代碼檔 b
where 1=1
and a.機關名稱=b.機關名稱
and a.送審年 = b.送審年
and a.總帳科目 = b.代碼
and cast(a.送審月 as decimal) = cast(b.送審月 as decimal)

建立包含代碼名稱之新表:

create table 新明細分類帳 as
select a.*, b.名稱 as 科目名稱
from 明細分類帳 a, 基本代碼檔 b
where 1=1
and a.機關名稱=b.機關名稱
and a.送審年 = b.送審年
and a.總帳科目 = b.代碼
and cast(a.送審月 as decimal) = cast(b.送審月 as decimal)
之後原來的 SQL即簡化為:

select *
from 新明細分類帳

2018年5月1日 星期二

將數值表徵文字淨化成數值,以SQLite為例

有些原始資料儲存數值的文字表徵,例如"99,550",包含有雙引號及千分位號,而無法進行數值運算,因此需要將數值表徵文字轉成數值的資料淨化程序。
首先要先把數值表徵文字轉成您所運用SQL系統型態轉換機制能處理的數值表徵文字,以SQLite為例,該系統無法自動去除「"」(雙引號)或「,」(千分位號)字元,只能辨識「99550」形式的數值表徵文字,所以我們先運用 replace 函數刪除字串內的雙引號及千分位號:

select 建議金額, replace(replace(建議金額, '"', ''), ',', '')  建議金額數值
from suggesions

承上,文字轉換成系統型態轉換機制能處理的數值表徵文字,就利用 cast 表示式求得數值:

select 建議金額, cast(replace(replace(建議金額, '"', ''), ',', '') as decimal) 建議金額數字


from suggesions

最後,以上式確認轉換無誤後,再利用 update 陳述式將表格內的數值表徵文字轉型成數值,完成資料淨化:

update suggesions
set 建議金額 = cast(replace(replace(建議金額, '"', ''), ',', '') as decimal)

2018年4月26日 星期四

表格欄位資料類型轉換

有時候匯入表格時欄位是文字型態的數字,造成該欄位是文字型態,以下的方法可以將表格欄位資料類型轉換,以 SQLite 為釋例:

1.原表格更名:

ALTER TABLE 支出傳票明細檔 RENAME TO tmp;

2.建立新表:

CREATE TABLE 支出傳票明細檔 ( `主管機關代碼` ,...,`傳票號碼` as integer,... )

3.原表資料經型態轉換插入至新表:

INSERT INTO 支出傳票明細檔( `主管機關代碼` ,...,`傳票號碼` as integer,...) 
SELECT `主管機關代碼` ,...,cast(`傳票號碼` as decimal),... FROM tmp;

4.刪除原表格:

DROP TABLE tmp;