2016-01-13 55 views
1

以下函數刪除文本或VARCHAR列的所有空格,並返回修改後的文本/ VARCHAR作爲一個int:SQL:如何在UPDATE子句中應用函數(存儲過程)來更改值?

select condense_and_change_to_int(number_as_text_column) from mytable; 

這個準確的查詢不工作。

儘管我的目標是將此函數應用於列的所有行,以便始終更改其值。我將如何做到這一點?這是可能與UPDATE子句,或者我需要在一個函數本身做到這一點?我嘗試了以下:

UPDATE mytable 
SET column_to_be_modiefied = condense_and_change_to_int(column_to_be_modiefied); 

基本上我想輸入當前行的值,修改它並將其保存到列permanantly。

我很歡迎關於如何解決這些情況的所有想法。我正在使用postgresql(但也歡迎更通用的解決方案)。

+2

當你想你'update'聲明發生了什麼? –

+0

請正確標記您的問題。你正在使用哪個數據庫,SQL Server或Postgres? –

回答

0

是否可能與update?嗯,是的,有點。

從您的描述中,該函數的輸入是某種字符串。輸出是一個數字。通常,數字應分配給數字類型的列。假設是所討論的列是一個數字。

但是,您的更新應該工作。結果將是數字的字符串表示形式。

運行更新後,您可以更改列式,喜歡的東西:

alter table mytable alter column column_to_be_modiefied int; 
+0

「一般來說,數字應該分配給數字類型的列,假設列中的數字是一個數字。」 你是什麼意思?如何將數字分配給具有數字類型的列?正確的,輸入是一個文本或一個varchar列值,輸出是一個整數。爲了格式化文本/ varchar,然後將其存儲爲整數,我專門編寫了該函數。 當我返回一個整數時,爲什麼輸出是一個字符串表示? – XmikeX

+0

@XmikeX。 。 。輸出是一個整數。它被分配到一個字符串列,所以它被轉換爲一個字符串。完成分配後,您可以將該列修改爲數字類型,如答案中所述。 –