我有以下查询可以运行并执行应该执行的操作:
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
答案 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))