sql - 只有在 SQL Server 中不为空时,我如何连接?
问题描述
我有这张桌子:
人表
| id | name |
---------------
| 10 | Mike |
| NULL | Jane |
我想从表中选择 id 和 name 并在 id 上使用 concat,但前提是它不为空,如下所示:
+------+------+
| Id | Name |
+------+------+
| A10 | Mike |
| NULL | Jane |
+------+------+
我尝试了以下方法:
SELECT ISNULL(concat('A', id), NULL) AS id, name FROM PeronTable
但我的查询返回这个:
+-----+------+
| Id | Name |
+-----+------+
| A10 | Mike |
| A | Jane |
+-----+------+
解决方案
嗯。您可以使用+
代替concat()
:
select 'A' + convert(varchar(255), id), name
from t;
convert()
(或cast()
)是必要的,假设它id
是一个数字而不是一个字符串。
+
NULL
如果任何参数是,则返回NULL
;concat()
忽略NULL
论点。
当然,您可以使用concat()
表达式case
:
select (case when id is not null then concat('A', id) end), name
from t;
推荐阅读
- azure - 在 Jenkins 活动选择参数列表中列出驻留在 Azure Key Vault 中的所有机密版本
- c# - 每个 IActionResult 的 .Net Core 3 AuthorizationFilter
- c++ - 容器类型的模板特化
- python - 初始过滤后按属性计算的 Django 查询集计数
- json - 我有一个带有重复父对象的 json。我需要在 bash 中使用 jq 合并一个父级下的所有子级
- javascript - 尝试在 mysql 中存储特定的 json 键时出错
- python - 在 Python 中:如何重复创建和删除 Turtle 窗口?
- c# - 从 DateTimePicker 传递日期
- pyspark - 有没有办法在单个 pyspark 脚本中取消嵌套数据块中的 bigquery 列
- c++ - 在空的 std::vector 上调用 resize(0) 是否合法?