1
A
回答
-1
如何限制長度?像12345.789.22.7890是無效的,因爲IP 0-255
範圍即使你分手的IP到各自的八位組,驗證對字符串的長度完全基於仍然會產生誤報的原因,超過250的整數爲三個字符長。
可以在IP地址沒有子網進行最驗證是使用:
LIKE [1-250].[0-250].[0-250].[0-250]
...假設提交一個字符串(我會考慮使用CHECK約束實施)。
參考文獻:
0
爲什麼IP地址不是存儲爲4 256位元素(字節型)用字符串再版一起?當然,它有點浪費空間,但它可以讓你編寫更簡單的查詢,不是嗎?
0
最佳答案我已經在T-SQL至今使用概述in a blog article的規則中。我將這些規則用於驗證IP地址的函數,然後將其轉換爲大整數,以便查找與IP地址關聯的國家/地區。這很有幫助,因爲我無法控制IP地址的輸入值,所以我無法在源系統上強制執行數據完整性約束。下面是已修改的功能的副本,以便在IP地址有效時返回1,如果無效則返回0。
CREATE FUNCTION dbo.udf_ValidateIPAddress
(@InputString VARCHAR(8000))
RETURNS TINYINT
AS
BEGIN
DECLARE @Return BIGINT = IIF(@InputString LIKE '%_.%_.%_.%_' -- 3 periods and no empty octets
AND @InputString NOT LIKE '%.%.%.%.%' -- not 4 periods or more
AND @InputString NOT LIKE '%[^0-9.]%' -- no characters other than digits and periods
AND @InputString NOT LIKE '%[0-9][0-9][0-9][0-9]%' -- not more than 3 digits per octet
AND @InputString NOT LIKE '%[3-9][0-9][0-9]%' -- NOT 300 - 999
AND @InputString NOT LIKE '%2[6-9][0-9]%' -- NOT 260 - 299
AND @InputString NOT LIKE '%25[6-9]%' -- NOT 256 - 259
, 1, 0)
RETURN @Return;
END
0
這可以使用SQL Server的PARSENAME函數來實現。 下面是對此的完整演示: 我們首先創建一個表並使用PARSENAME定義CHECK約束。
CREATE TABLE tbl_IPAddress
(
IPAddress VARCHAR(15)
)
GO
ALTER TABLE tbl_IPAddress ADD CONSTRAINT chk_tbl_IPAddress_IPAddress
CHECK
(
(ParseName(IPAddress, 4) = 12)
AND (ParseName(IPAddress, 3) = 4)
AND (ParseName(IPAddress, 2) BETWEEN 8 AND 26)
AND (ParseName(IPAddress, 1) BETWEEN 1 AND 255)
)
GO
你可以看到不同的四個部分驗證,
首先兩部分驗證:只有IP地址範圍,開始與12.4 最後兩個部分驗證:8〜26。 1〜255
表示有效的IP地址爲:
12.4.8.125
12.4.15.241
無效的IP地址爲:
10.2.21.52
12.4。 7。124
欲瞭解更多詳情,請訪問: http://www.dbrnd.com/2015/06/validate-ip-address-range-in-sql-server/
相關問題
- 1. SQL Server 2005,權限驗證
- 2. 格式化SQL Server 2005中
- 3. 在Sql server 2005驗證數據遷移
- 4. SQL Server 2005貨幣格式
- 5. UPDATE SET中的子查詢(sql server 2005)
- 6. SQL Server 2005 HTTP端點身份驗證
- 7. sql server 2005 Windows身份驗證權限
- 8. 如何將SQL Server 2005從Windows身份驗證更改爲SQL身份驗證?
- 9. 如何基於在SQL Server
- 10. 如何添加基於SQL Server中的子查詢數2005
- 11. 基於在SQL Server月如何分割日期範圍2005
- 12. SQL Server中基於證書的身份驗證
- 13. SQL Server 2005中的SET NOCOUNT可以包含單個語句嗎?
- 14. 如何在sql server中驗證時間?
- 15. SQL Server 2005混合模式認證
- 16. 如何在SQL Server 2005/2008
- 17. 如何在SQL Server [2005]
- 18. SQL Server 2005中對於XML明確 - 需要幫助的格式
- 19. 如何在SQL Server 2005中從另一個SQL Server 2005中調用SQL腳本
- 20. 在SQL Server 2005中
- 21. 時間格式hhmm到hh:mm sql server 2005
- 22. 更改SQL Server 2005日期格式
- 23. loweredrolename在aspnet_Users表格內(SQL Server 2005中)
- 24. 在SQL Server 2005中導出表格
- 25. 如何反轉字符串(SQL Server 2005,SET BASED)
- 26. 情況下,T-SQL在SQL Server 2005/2008
- 27. 如何在Sql Server 2005中更改UDT的基類型?
- 28. SQL Server 2005中
- 29. SQL Server 2005中
- 30. 在SQL Server 2005
LIKE [1-250]不起作用。 SELECT IIF('24'LIKE'[1-250]',1,0)返回0而不是1。 – 2014-03-21 08:21:45