SQLSEVER 2005 sql 정렬 정 답(크기 에 따라 정렬)

오늘 포럼 에서 다음 과 같은 문 제 를 보 았 습 니 다.
 
이 문 제 를 해결 하기 위해 Insus.NET 은 함 수 를 써 서 이후 의 확장 을 편리 하 게 할 수 있 습 니 다.만약 에 수치 가 TB 나 더 높 을 때 이 함수 만 바 꾸 면 됩 니 다
 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[udf_OrderLimitSize]
(
@Ov NVARCHAR(30)
)
RETURNS decimal(18,6)
AS
BEGIN
-- 2 NULL
IF (LEN(@Ov) <= 2)
RETURN NULL
--
DECLARE @v DECIMAL(18,6),@n DECIMAL(18,6)

--
IF (RIGHT(@Ov,2) NOT IN ('TB','GB','MB','KB'))
RETURN NULL
-- , DECIMAL
SET @n = CONVERT(DECIMAL(18,6),LEFT(@Ov, LEN(@Ov) - 2))
-- , ISNUMERIC , NULL
IF (ISNUMERIC(@n) = 0)
RETURN NULL
-- , ,
IF (@Ov LIKE '%TB')
SET @v = @n * 1024 * 1024 * 1024
IF (@Ov LIKE '%GB')
SET @v = @n * 1024 * 1024
IF (@Ov LIKE '%MB')
SET @v = @n * 1024
IF (@Ov LIKE '%KB')
SET @v = @n
RETURN @v
END
다음은 이 함 수 를 응용 하기 위해 예 를 들 면
 
CREATE TABLE test(id int identity(1,1),size NVARCHAR(50))
GO
INSERT INTO [test] values('23.5mb'),('10gb'),('12.7mb'),('8GB')
go
SELECT [id],[size] FROM test ORDER BY [dbo].[udf_OrderLimitSize]([size])
실행 결과:

좋은 웹페이지 즐겨찾기