0

同じ 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 ステートメントを実行して列の型を確認し、適切な型を使用する方法はありますか?

4

3 に答える 3

1

関数のすべての可能な出力値が同じ型になるように、非文字の列値を文字に変換する必要があります。Str()機能を使用する

SELECT ISNULL(Str(ColumnOne, 8,4), 'UNKNOWN'), 
       ISNULL(str(ColumnTwo, 8,4), 'UNKNOWN'), 
       ISNULL(Str(ColumnThree, 8, 4), 'UNKNOWN')
 FROM db.dbo.tableName

まだ VARCHAR でないすべての列に対してこれを行います

于 2013-08-20T13:05:45.307 に答える