Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с MAX & MIN!!!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
Добрый день, Ребята.
Пишу процедуру, в ходе, которой нужно найти MIN и MAX значения в поле. Но почему то, на результат мне выводится MIN и MAX каждой строки. Внизу, на картинке, 1-я таблица, это все содержимое tb.@MediumTable, а 2 остальные (т.е 1 и 3), якобы MIN и MAX в этой таблице. Как Видите, MAX должен быть 16, а не 3.
Может кто нибудь помочь?!
Спасибо!

Вот тело процедуры:
DECLARE @new_range_start nvarchar (15)
SET @new_range_start = 2
DECLARE	@new_range_end nvarchar (15)
SET @new_range_end = 15

IF EXISTS 
(
	SELECT 
		[IP_Ranges].[Range_Start], 
		[IP_Ranges].[Range_End] 
		
	FROM [dbo].[IP_Ranges]

	WHERE NOT
	(
		CONVERT (INT, [IP_Ranges].[Range_Start]) > CONVERT (INT, @new_range_end) OR
		CONVERT (INT, [IP_Ranges].[Range_End]) < CONVERT (INT, @new_range_start)
	)
)
BEGIN
	DECLARE @MediumTable TABLE 
	(
		medium_range_start NVARCHAR (15),
		medium_range_end NVARCHAR (15)
	)

	INSERT INTO @MediumTable
	(
		medium_range_start,
		medium_range_end
	)

	SELECT 
		[IP_Ranges].[Range_Start], 
		[IP_Ranges].[Range_End] 
		
	FROM [dbo].[IP_Ranges]

	WHERE NOT
	(
		CONVERT (INT, [IP_Ranges].[Range_Start]) > CONVERT (INT, @new_range_end) OR
		CONVERT (INT, [IP_Ranges].[Range_End]) < CONVERT (INT, @new_range_start)
	)

	INSERT INTO @MediumTable
	(
		medium_range_start,
		medium_range_end
	)

	VALUES 
	(
		@new_range_start,
		@new_range_end
	)
	 
	DECLARE @Min_range_start NVARCHAR (15)
	SET @Min_range_start = (SELECT CONVERT (INT, MIN (medium_range_start)) FROM @MediumTable);
	DECLARE @Max_range_end NVARCHAR (15)
	SET @Max_range_end = (SELECT CONVERT(INT, MAX (medium_range_end)) FROM @MediumTable);
	SELECT * FROM @MediumTable
	SELECT DISTINCT @Min_range_start FROM @MediumTable
	SELECT DISTINCT @Max_range_end FROM @MediumTable
END

ELSE
BEGIN
	SELECT * FROM [dbo].[IP_Ranges]
END


А вот результат который он выдает:

К сообщению приложен файл. Размер - 7Kb
29 апр 14, 10:48    [15950561]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с MAX & MIN!!!  [new]
CONVERT(INT
Guest
все потому, что вы сначала находите наибольшую/наименьшую из строк и только потом приводите ее к числу.
29 апр 14, 10:57    [15950604]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с MAX & MIN!!!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
CONVERT(INT, Спасибо за Ваш отклик.
Но я вообще убрал этот CONVERT, все равно, выдает то же самое!
29 апр 14, 11:02    [15950623]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с MAX & MIN!!!  [new]
adimmat
Member

Откуда: Таджикистан
Сообщений: 180
CONVERT(INT, Спасибо Огромное за помощь. Исправил все. Заработало!
Вот так: @Max_range_end = (SELECT MAX (CONVERT (INT, medium_range_end)) FROM @MediumTable);
29 апр 14, 11:05    [15950639]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с MAX & MIN!!!  [new]
CONVERT(INT
Guest
adimmat
CONVERT(INT, Спасибо Огромное за помощь. Исправил все. Заработало!
Вот так: @Max_range_end = (SELECT MAX (CONVERT (INT, medium_range_end)) FROM @MediumTable);

1. самое лучше числа хранить как числа
2. уж если так случилось, что числа хранятся как строки, и ничего с этим не поделать, преобразовывайте их как можно раньше, в вашем случае уже при вставке @MediumTable


	DECLARE @MediumTable TABLE 
	(
		medium_range_start tinyint,
		medium_range_end tinyint
	)

	INSERT INTO @MediumTable
	(
		medium_range_start,
		medium_range_end
	)

	SELECT 
		cast([IP_Ranges].[Range_Start] as tinyint), 
		cast([IP_Ranges].[Range_End] as tinyint)
29 апр 14, 11:11    [15950683]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить