2011-12-19 53 views
-1

在字符串的中间两个值之间的int值我有一个nvarchar列具有值的像查找与nvarchar列一列,在

'21:15:00 1390年9月10日星期一'

我想选择'1390/09/07'和'1390/09/15'之间有第三部分(意思是'1390/09/10')的行。出于某些原因,我不想更改列值的结构以使第三部分开始或结束字符串。我想这

SELECT * FROM表WHERE BETWEEN '%第1390/09/0.07%' 和 '%1390至09年/ 15%'

列,但它不会工作。我使用SQL Server 2008

+2

什么RDBMS?无论如何,你应该把你的桌子重新组合成1NF。您不应该分解列值才能执行此类查询。 – 2011-12-19 15:48:22

+0

@马丁史密斯,所以你的意思是我们不能做这样的事情? – hamze 2011-12-19 15:52:37

+1

你**可以**,但这是完全不可检索的,所以你的查询将总是必须扫描所有的行,以及不必要的复杂和验证数据的问题。 – 2011-12-19 15:53:23

回答

1

要提取你必须做这个日期:

DECLARE @t VARCHAR(100) ='21:15:00 monday 1390/09/10 morning' 
SELECT CONVERT(DATETIME2, SUBSTRING(@t, PATINDEX('%[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]%',@t),10),111) 

我用DATETIME2为我所用SQL Server 2008的

我希望这可以帮助您。