我有几个数据库,我试图用相同的 SQL 代码在我的网站上查询。我正在将我想通过 URL 使用的列名/表传递到新页面。例如:
/some/url.php?table=tableName&c1=ColumnOne&c2=ColumnTwo&c3=ColumnThree&n=3
我有几个这些 URL 都链接到同一页面(但具有不同的表名和列)。在下一页上,PHP 代码将是这样的
for ($j = 1; $j <= $n; $j++) {
// Since the number of column variables varies (there could be c1 and c2, or c1 -> c5), you need to save this part of the query in a variable
$variables .= ${'c' . $j} . ', ';
}
SELECT $variables
FROM db.dbo.tableName
所以这 3 列的实际查询是
SELECT ColumnOne, ColumnTwo, ColumnThree
FROM db.dbo.tableName
问题是有些列是浮动的,有些是 nvarchar(254)。在浮点列中,空值为 0。在 nvarchar(254) 列中,空值只是 NULL。我需要 nvarchar(254) 列中的 NULL 值为“UNKNOWN”,浮点列中的 0 值也为“UNKNOWN”。
这是我的意思的一个例子。ColumnOne 和 ColumnTwo 是浮点数,而 ColumnThree 是 nvarchar(254)。
---------------------------------------------
|ColumnOne |ColumnTwo |ColumnThree |
---------------------------------------------
|0 |142563 |Insert |
---------------------------------------------
|1 |348 |Some |
---------------------------------------------
|2 |2535 |NULL |
---------------------------------------------
|3 |0 |Value |
---------------------------------------------
|0 |82536 |NULL |
---------------------------------------------
|5 |0 |Here |
---------------------------------------------
这是我希望它看起来的样子
---------------------------------------------
|ColumnOne |ColumnTwo |ColumnThree |
---------------------------------------------
|UNKNOWN |142563 |Insert |
---------------------------------------------
|1 |348 |Some |
---------------------------------------------
|2 |2535 |UNKNOWN |
---------------------------------------------
|3 |UNKNOWN |Value |
---------------------------------------------
|UNKNOWN |82536 |UNKNOWN |
---------------------------------------------
|5 |UNKNOWN |Here |
---------------------------------------------
我试过这个
SELECT ISNULL(ColumnOne, 'UNKNOWN'), ISNULL(ColumnTwo, 'UNKNOWN'), ISNULL(ColumnThree, 'UNKNOWN')
FROM db.dbo.tableName
但是,我收到此错误:Error converting data type varchar to float
有人可以帮我吗?这将不胜感激!
编辑:我知道要将浮点列中的 0 值转换为 UNKNOWN,我需要这样做
(CASE WHEN ColumnOne = 0 THEN 'UNKNOWN' ELSE CAST(ColumnOne AS varchar(255)) END)
并将 NULL 值转换为 nvarchar(254) 列中的 UNKNOWN,我需要这样做
ISNULL(ColumnOne, 'UNKNOWN')
我只是不知道列类型。有没有办法做一个 CASE 语句来检查列类型,然后使用适当的?