同じ SQL コードを使用して Web サイトでクエリを実行しようとしているデータベースがいくつかあります。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
問題は、一部の列が float で、一部が nvarchar(254) であることです。In the float columns, the null values are 0. In the nvarchar(254) column, null values are just NULL. nvarchar(254) 列の NULL 値を「UNKNOWN」にする必要があり、float 列の 0 値も「UNKNOWN」にする必要があります。
これは私が言いたいことの一例です。ColumnOne と ColumnTwo は float ですが、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
誰かが私を助けることができますか?それは大歓迎です!
編集: float 列で 0 の値を UNKNOWN に変換するには、これを行う必要があることを知っています
(CASE WHEN ColumnOne = 0 THEN 'UNKNOWN' ELSE CAST(ColumnOne AS varchar(255)) END)
nvarchar(254) 列で NULL 値を UNKNOWN に変換するには、これを行う必要があります
ISNULL(ColumnOne, 'UNKNOWN')
列の種類がわかりません。CASE ステートメントを実行して列の型を確認し、適切な型を使用する方法はありますか?