SQL函数的难题!

1.数据库里有一个字段是字符串的IP地址,怎样使用SQL语句使它的返回结果在不足三位的IP地址前补零?例如:
2.“192.168.1.23”查询返回的结果是“192.168.001.023”
我要查询在一个IP段范围内的数据又怎么写?比如查询从“192.168.1.9”到“192.168.1.234”的数据
[167 byte] By [zhyuanshan] at [2008-1-6]
# 1
declare @t table(ip varchar(20))
insert @t
select '192.168.1.23' union all
select '192.168.1.213' union all
select '192.168.221.23' union all
select '192.168.1.255' union all
select '192.8.1.23' union all
select '62.8.1.3'

SELECT
replicate('0',3-len(parsename(ip,4))) + parsename(ip,4) + '.' +
replicate('0',3-len(parsename(ip,3))) + parsename(ip,3) + '.' +
replicate('0',3-len(parsename(ip,2))) + parsename(ip,2) + '.' +
replicate('0',3-len(parsename(ip,1))) + parsename(ip,1)
FROM @t
hellowork-一两清风 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,疑难问题...
# 2
查询从“192.168.1.9”到“192.168.1.234”的数据
-----------------------------------------------------------------------------------
declare @StarTIP varchar(20)
declare @EndIP varchar(20)
set @StartIP = '192.168.1.9'
set @EndIP = '192.168.1.234'

select * from @t where
cast(replace(ip,'.','') as bigint) between cast(replace(@StartIP,'.','') as bigint) and cast(replace(@EndIP,'.','') as bigint)
hellowork-一两清风 at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,疑难问题...
# 3
使用function
-------------------------------------------
create function FormatIP(@ip varchar(15))
returns varchar(15)
as
begin
--declare @fip varchar(15)
return right('00' + parsename(@ip,4),3) + '.' +
right('00' + parsename(@ip,3),3) + '.' +
right('00' + parsename(@ip,2),3) + '.' +
right('00' + parsename(@ip,1),3)
end

select dbo.FormatIp('192.168.0.1')
leohuang-LEO at 2007-10-25 > top of Msdn China Tech,MS-SQL Server,疑难问题...