pgsql:字符串转数值

时间:2025-04-21 10:32:01

查询语句中可以使用to_number转换为数值类型

SELECT * FROM t_invoice_used
WHERE to_number(invoice_no,'999999999')>=500

1、将数值转成字符串类型
 方法1:调用to_char(int, text)函数,int为要转换值,text为数值格式化模式,其中模式描述为:

模式                 描述
9                 带有指定数值位数的值
0                 带前导零的值
.                  (句点) 小数点
,                  (逗号) 分组(千)分隔符
PR              尖括号内负值
S                 带符号的数值
L                 货币符号
D                 小数点
G                 分组分隔符
MI                 在指明的位置的负号(如果数字 < 0)
PL                 在指明的位置的正号(如果数字 > 0)
SG                 在指明的位置的正/负号 

使用举例: 

SELECT to_char(12345, '9999999999999999999')//结果‘              12345’,结果字符串前面有空格,位数跟格式化模式中9的位数有关;
SELECT to_char(12345, '99999')//结果‘12345’
SELECT to_char(12345, '9999')//结果‘####’,当模式串小于数字个数时,字符串会显示为#,位数跟 格式化模式中9的位数有关;
SELECT to_char(12345, '')//结果‘’ 


 方法2:

将数值转成字符串且不要前面的空格实现起来很麻烦,由于无法判断 格式化模式中9的位数。可用下面通过||连接解决,如:

''||12345 

2、将字符串转成数值
方法调用: to_number(text,text )函数,参数1是要转的数字字符串,参数2为模式参数,返回的类型 numeric  
使用举例:

SELECT to_number('12345', '9999999999999999999')//12345
SELECT to_number('12345', '99999')//12345
SELECT to_number(''||12345, '9999')//1234,由于模式是4位,结果忽略最后一位;
SELECT to_number('    12345', '9999999999999999999')//12345
SELECT to_number('  ab  ,1,2a3,4b5', '9999999999999999999')//12345,会忽略所有字符串中非数字字符
select to_number('12,454.8-', '99G999D9S') 

另外还可以把'1234'转成整数 

select cast('1234' as integer) ;
select cast('1234' as int) ; 

--用substring截取字符串,从第8个字符开始截取2个字符:结果是12。(索引从1开始) 

select cast(substring('1234abc12',8,2) as integer)  

还见过以下写法

select '123456'::int  test