SUBSTRING空值替代

时间:2018-05-14 06:48:55

标签: sql sql-server tsql

我有以下查询可以运行并执行应该执行的操作:

select 
SUBSTRING(LastName,2,1)
+SUBSTRING(LastName,3,1)
+SUBSTRING(LastName,5,1) 
+SUBSTRING(FirstName,2,1) 
+SUBSTRING(FirstName,3,1)
+replace(convert(varchar, DateOfBirth,101),'/','')
+CASE WHEN GenderID = '1' Then '1' WHEN GenderID = '2' Then '2' ELSE '9' END
from 
    Client

但是,如果任何SUBSTRINGS返回一个空字符串,则需要将其替换为2.例如,如果LastName为Bond,则SUBSTRING(LastName,5,1)需要返回2.

有人会怎么建议这样做?我试图避免这样的事情:

select CASE WHEN SUBSTRING('James',5,1) = '' THEN '2' ELSE SUBSTRING('James',5,1) END

3 个答案:

答案 0 :(得分:2)

我认为这是最简单的方法:

'2'

这只会在结尾添加足够的substring()以确保varchar()找到一个字符。

请注意其他两项更改。我在GenderId添加了一个长度参数。您应该始终使用长度参数,因为默认长度因上下文而异 - 导致难以发现的错误。我还简化了GenderId的逻辑(假设public class SendCertReq { public static void main(String[] args) throws Exception { URL url = new URL("https://www.google.co.in/"); //Remember to Add proxy IP Address where 192.168.0.1 is my Proxy Address and Port is 8080. // Change as per your proxy setting Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.0.1", 8080)); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(proxy); conn.setRequestMethod("GET"); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.close(); System.out.println(conn.getResponseMessage()); } } 是一个字符串)。

答案 1 :(得分:1)

这是一招:

SELECT
    LEFT(SUBSTRING(LastName, 2, 1) + '2', 1) AS first_part
FROM Client

如果对SUBSTRING的调用返回空字符串输出,则对LEFT的调用将返回'2'。否则,LEFT('#2', 1)会将通话中的号码返回SUBSTRING(此处我使用#代表任意号码。)

正如@dnoeth在他的评论中所指出的,这个解决方案只有在子字符串长度为1时才有效,这对于你的查询/数据来说就是这种情况。

答案 2 :(得分:0)

尝试:如果您希望将IIF用于SQL SERVER 2012 or +

SELECT IIF (SUBSTRING('James',6,1)='', '2', SUBSTRING('James',5,1))