在情况发生时使用替换功能
Use Replace Function in Case When Condition
Table 名称是 tabelea
列是 name,expdate
。两个列都没有空约束。两列都有不同的字符数据类型。
值
name expdate
A '10-05-2015'
B ' '
现在我想获取 expdate
不为空的值,然后转换为日期格式,否则为空。所以我试过这样
select name,case when replace(expdate,' ','') <> '' then
to_char(cast(expdate as date),'dd-MM-yyyy') else null end from tablea
但无法显示错误 类型日期的输入语法无效:“' '”。
如何解决?
我也试过trim
。
PostgreSQL 9.3
如果您将空字符串转换为 null
值,则可以在单个调用中组合它:
select name,
to_char(cast(nullif(trim(expdate), '') as date),'dd-MM-yyyy')
from tablea;
cast
依赖于一些隐式数据类型转换。最好使用 to_date()
和明确的格式:
to_char(to_date(nullif(trim(expdate), ''), 'dd-mm-yyyy'),'dd-MM-yyyy')
SQLFiddle 示例:http://sqlfiddle.com/#!15/a9831/1
您可以使用波浪号将您的字符串与所需的日期模式进行比较,然后再将其设为日期:
select
name,
case when expdate ~ '^[[:digit:]]{2}-[[:digit:]]{2}-[[:digit:]]{4}$' then
to_date(expdate, 'dd-MM-yyyy')
else
null
end as the_date
from tablea;
(当然,首先使用字符串数据类型存储日期是个坏主意。)
SQL fiddle: http://sqlfiddle.com/#!15/a66cf/2.
Table 名称是 tabelea
列是 name,expdate
。两个列都没有空约束。两列都有不同的字符数据类型。
值
name expdate
A '10-05-2015'
B ' '
现在我想获取 expdate
不为空的值,然后转换为日期格式,否则为空。所以我试过这样
select name,case when replace(expdate,' ','') <> '' then
to_char(cast(expdate as date),'dd-MM-yyyy') else null end from tablea
但无法显示错误 类型日期的输入语法无效:“' '”。
如何解决?
我也试过trim
。
PostgreSQL 9.3
如果您将空字符串转换为 null
值,则可以在单个调用中组合它:
select name,
to_char(cast(nullif(trim(expdate), '') as date),'dd-MM-yyyy')
from tablea;
cast
依赖于一些隐式数据类型转换。最好使用 to_date()
和明确的格式:
to_char(to_date(nullif(trim(expdate), ''), 'dd-mm-yyyy'),'dd-MM-yyyy')
SQLFiddle 示例:http://sqlfiddle.com/#!15/a9831/1
您可以使用波浪号将您的字符串与所需的日期模式进行比较,然后再将其设为日期:
select
name,
case when expdate ~ '^[[:digit:]]{2}-[[:digit:]]{2}-[[:digit:]]{4}$' then
to_date(expdate, 'dd-MM-yyyy')
else
null
end as the_date
from tablea;
(当然,首先使用字符串数据类型存储日期是个坏主意。)
SQL fiddle: http://sqlfiddle.com/#!15/a66cf/2.