Количество числовых значений в столбце NVarchar в SQL Server 2005 - PullRequest
0 голосов
/ 17 мая 2011

У меня есть столбец Nvarchar, который содержит данные, относящиеся к разным типам данных, таким как числа, даты и т.Я хотел узнать количество ячеек с числовым типом данных и количество ячеек с типом данных Date.

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Похоже, вы просто хотите 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

Это предполагает, что у вас есть один формат даты, и что этот формат поддерживается параметром dateformat в SQL Server.Чтобы определить правильный формат, вы должны использовать SET DateFormat.См. Документация MSDN по IsDate .

. Вы упоминаете, что «20041201» может быть допустимой датой, поэтому я добавил дополнительную проверку IsDate () в числовом количестве (я полагаю, вы нене хочу считать это и датой, и числом).

0 голосов
/ 17 мая 2011

Сначала вы должны разбить ваш столбец (создайте функцию split, которая преобразует строку с разделителями в столбец).Вы можете найти много примеров в Интернете.У меня есть один здесь .Итак, вот пример:

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 числовых числа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...