teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/03/02 12:26

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -3,4 +3,12 @@
3
3
  ```SQL
4
4
  concat(case sign(num) when 1 then '+' end, num)
5
5
  ```
6
- 但し、値がNullのケースがあり、結果もNullとしたい場合にはNull判定が必要になります。
6
+ 但し、値がNullのケースがあり、結果もNullとしたい場合にはNull判定が必要になります。
7
+
8
+ 追記
9
+ --
10
+ case 部分を文字列として確定させれば,`+`演算子でも大丈夫ですね。
11
+ ※Nullも問題なし。
12
+ ```SQL
13
+ case sign(num) when 1 then '+' else '' end + CONVERT(VARCHAR(2),Num)
14
+ ```

1

追記

2021/03/02 12:26

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,5 +1,6 @@
1
1
  暗黙変換によって、`+`が文字列結合ではなくて、加算として作用しているので、明示的な[CONCAT()](https://docs.microsoft.com/ja-jp/sql/t-sql/functions/concat-transact-sql?view=sql-server-ver15)を用いましょう。
2
2
  また、符号を判断するなら[SIGN()](https://docs.microsoft.com/ja-jp/sql/t-sql/functions/sign-transact-sql?view=sql-server-ver15)を使用する方がパターン分けは簡潔になります。
3
3
  ```SQL
4
- concat(case sign(num) when 1 then '+' else '' end, num)
4
+ concat(case sign(num) when 1 then '+' end, num)
5
- ```
5
+ ```
6
+ 但し、値がNullのケースがあり、結果もNullとしたい場合にはNull判定が必要になります。