我有一個Nvarchar列,其中包含與不同數據類型(例如數字,日期等)有關的數據。 我想找出具有數字數據類型的單元格數量和具有日期數據類型的單元格數量。SQL Server 2005中的NVarchar列中存在的數字值的數量
感謝
我有一個Nvarchar列,其中包含與不同數據類型(例如數字,日期等)有關的數據。 我想找出具有數字數據類型的單元格數量和具有日期數據類型的單元格數量。SQL Server 2005中的NVarchar列中存在的數字值的數量
感謝
首先,在所有你應該分裂您柱(創建分割功能,這將變換分隔字符串轉換成列)。你可以在互聯網上找到很多例子。我有一個here。所以這裏有一個例子:
declare @text nvarchar(max)='1211221,ssssss,1212,2010-02-01,20100201'
DECLARE @delimiter char(1)=','
;WITH Pieces(pn, start, stop) AS (
SELECT CASt(1 as Int), CAST(1 as integer), CHARINDEX(@delimiter,@text)
UNION ALL
SELECT pn + 1, CAST(stop + 1 as integer), CHARINDEX(@delimiter,@text, stop + 1)
FROM Pieces
WHERE stop > 0
), T as(
SELECT pn,
SUBSTRING(@text, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces)
SELECT
SUM(CASE WHEN ISNUMERIC(T.s)=1 AND ISDATE(T.s)=0 THEN 1 ELSE 0 END) NumericCount,
SUM(CASE WHEN ISDATE(T.s)=0 THEN 0 ELSE 1 END)DateCount
FROM T
你將有2個日期和2個數字計數
看起來你只是想則IsDate()和則IsNumeric():
SELECT Sum(CASE WHEN IsDate(DataColumn) = 1 THEN 1 ELSE 0 END) AS Dates,
Sum(CASE WHEN IsNumeric(DataColumn) = 1 AND IsDate(DataColumn) = 0 THEN 1 ELSE 0 END) AS Numbers
FROM YourTable
這是假設您有單一的日期格式,並且該格式由SQL Server的dateformat選項支持。要定義正確的格式,您可以使用SET DateFormat
。見MSDN Documentation on IsDate。
您提到'20041201'可能是一個有效的日期,這就是爲什麼我在數字計數中添加了額外的IsDate()檢查(我假設您不想將它計爲日期和數字) 。
將「20041201」計爲兩者嗎? – 2011-05-17 10:19:51
不應該算作日期。 – karteekgopu 2011-05-17 10:24:53