2011-05-17 23 views

回答

0

首先,在所有你應該分裂您柱(創建分割功能,這將變換分隔字符串轉換成列)。你可以在互聯網上找到很多例子。我有一個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個數字計數

1

看起來你只是想則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()檢查(我假設您不想將它計爲日期和數字) 。

相關問題