如何解决替换未在SQL中执行的操作
我有一个查询,从表中提取数据。在一个特定的字段中,有几种情况是零,但是我需要四位数的位置编号。这是我遇到问题的地方。我有
SELECT REPLACE(locationNbr,'0','1035') AS LOCATION...
两个问题-
- 将表放在一起的人将所有字段都设为VARCHAR,因此将单引号引起来。
- 在已经有1035号的情况下,我得到1103535作为位置号,因为它代替了1035年中的零。
如何选择locationNbr字段,如果它不是零(作为VARCHAR),则不做任何设置,但是如果它为零,则将其更改为1035?有没有办法以某种方式在REPLACE中使用TO_NUMBER?
解决方法
SELECT CASE WHEN locationNbr='0' THEN '1035' ELSE locationNbr END AS LOCATION...
REPLACE( string,string_to_replace,replacement_string )
REPLACE
在string_to_replace
内查找string
,并将其替换为replacent_string
。这就是为什么您会得到不良行为的原因-您使用了错误的功能。
CASE WHEN condition THEN result1 ELSE result2 END
CASE
检查condition
,如果为true,则返回result1
,否则返回result2
。这是一个简单的示例,您可以编写带有多个条件检查的case语句。
请勿使用replace()
。使用case
:
(case when locationNbr = '0' then '1035' else locationNbr end)
,
您可以在Oracle中使用长度:
select case when length(loacation) = 1 then REPLACE(loacation,'0','1035') else loacation end as location
from location_test;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。