他のテキストでテキストフィールド内に日付を格納しています。なぜ彼らはこれを日付フィールドに入れませんでしたか?私には分かりませんが、私は今それを変更する権限がありません。コードのどこかで、この日付が特定の範囲にあるレコードを取得するためにこれを実行しています。それはうまく動作します。SQL SELECTのwhere句の部分文字列から日付を取得する* EDITED *
For Each i As InventoryItem In inventoryList
index = i.Notes.IndexOf("on {") + 4
scanned_dt = i.Notes.Substring(index, i.Notes.Length - index - 1)
If Date.Parse(scanned_dt) >= startDate And Date.Parse(scanned_dt) <= endDate Then
...
ここで、特定の期間の合計アイテムを取得しようとしています。 このSQL文は、すべての日付の合計を取得します。
:どのように私だけにWhere句は、私がこのSQLのSELECT文を思い付いたi.NotesがstartDate
と
endDate
Dim sql As String = "Select COUNT(inv_PartNum) from lester.inventory i join lester.vendor v on v.vendor_ID = i.vendor_ID Where v.vendor_Name = '" + vendorName + "' AND i.inv_Desc LIKE '%" + size + "%'"
* EDITED * 間の日付を含む項目を数える更新することができます
SELECT COUNT(i.inv_PartNum) FROM cdms.lester.inventory AS I
join CDMS.lester.vendor AS v on v.vendor_ID = i.vendor_ID Where v.vendor_Name = 'JVE-285'
AND CONVERT(DATETIME,
SUBSTRING(i.inv_Notes, CharIndex('on {', i.inv_Notes)+4, len(i.inv_Notes)-(CharIndex('on {', i.inv_Notes) + 4)
),101) BETWEEN '01-01-2011' AND '04-04-2011'
ただし、このエラーが発生しています。 charデータ型をdatetimeデータ型に変換すると、範囲外のdatetime値が発生しました。マイinv_Notes列が「{2011年4月8日にツールトレーラー{JVE-285}に割り当てられたような文字列が含まれてい
SELECT * FROM (
SELECT i.inv_Notes,
CONVERT(DATETIME,SUBSTRING(i.inv_Notes, CharIndex('on {',i.inv_Notes)+4,LEN(i.inv_Notes)-(CharIndex('on {', i.inv_Notes) + 4)),101) AS d
FROM cdms.lester.inventory AS i
join CDMS.lester.vendor AS v ON v.vendor_ID = i.vendor_ID WHERE v.vendor_Name = 'JVE-285') AS s
:
はそれを理解しようと、私は、次のSQL SELECT文を作成しました} "
上記のようにクエリを実行すると、inv_Notes列とdate列が取得されます。日付はすべて「2011-04-08 00:00:00.000」の形式で表示され、エラーはスローされません。 charデータ型をdatetimeデータ型に変換すると、範囲外のdatetime値が返されました。私は日付あらゆる方法をフォーマットしようとしたが、常にエラーを取得しました
...私も WHERE s.d IS NOT NULL
と同じエラーを取得を試みた
WHERE s.d > CONVERT(DATETIME, '2011-1-1', 101)
WHERE s.d < GetDate()
WHERE s.d > '20110101'
WHERE s.d >= '2011-01-01'
WHERE s.d >= '01-01-2011'
WHERE s.d > '01/01/2011'
EDIT。これは明らかにWHEREの時点でb/cが動作していると思うように動作していないので、変換はすでに正常に行われているはずです。
SOLUTION この作業
SELECT * FROM (
SELECT i.inv_Notes,
SUBSTRING(i.inv_Notes, CharIndex('} on {',i.inv_Notes)+6,LEN(i.inv_Notes)-(CharIndex('} on {', i.inv_Notes) + 6))
AS d
FROM cdms.lester.inventory AS i
join CDMS.lester.vendor AS v ON v.vendor_ID = i.vendor_ID WHERE v.vendor_Name = 'JVE-285') AS s
WHERE PARSENAME(REPLACE(s.d, '/', '.'), 1)+
RIGHT('00'+PARSENAME(REPLACE(s.d, '/', '.'), 3),2)+
RIGHT('00'+PARSENAME(REPLACE(s.d, '/', '.'),2),2) BETWEEN '20110407' AND '20110409'
を手に入れた私は、整数比較をint型と行うためにそれをキャストしようとしたが、その後、私はエラーを取得します。 Inv_Notesフィールドのいくつかに「Item added {3/11/2011}」のようなデータが含まれていることが問題であることがわかりました。内側選択の条件が満たされていないので、内側選択で選択されていない場合は、アウターセレクトの条件には問題ありません。しかし、2011年をintにキャストしてエラーを投げようとしていました。私はそれが今までにキャストしようとしていたと確信しています。それが私が以前の問題を抱えていた理由です。
どのようなデータあなたはベースを使用していますか?私はストアドプロシージャを書くことをお勧めします –