我的联系人详细信息存储在indexDB中的JSON对象。有一个领域为" birthdate"它以04/05/2014
(dd/mm/yyyy
)格式存储。
我想仅通过匹配dd/mm
来检索记录。
我想要检索所有有特定生日的联系人(无论年份如何)。
答案 0 :(得分:0)
有很多方法可以解决这个问题。 你能做的是创建一个只能解析列中的dd / mm的函数
然后在where子句中说@user_entry = dbo.fnc_GetDDMM(table.jsoncol)
该函数可以利用索引和子串在DOB:DD / MM之后拉出任何东西 使用您提供的示例,它看起来像
if object_id('dbo.GetBirthdayFromJson', 'fn') is not null
begin
print 'drop: dbo.GetBirthdayFromJson'
drop function dbo.GetBirthdayFromJson
end
go
print 'create: dbo.GetBirthdayFromJson'
go
create function dbo.GetBirthdayFromJson
(
@json varchar(500)
)
returns date
as
begin
--declare @json varchar(500) = '{name:"sac",birthdate:"04/05/2014"}',
declare @birthday date
declare @birthdaystring varchar(50) = 'birthdate:"'
declare @blen int = len(@birthdaystring)
declare @bindex int = charindex(@birthdaystring, @json)
set @birthday= substring(@json, @bindex + @blen, 10)
return @birthday
end
然后你的地方可能会像这样
select * --dont use '*' but just an example
from sometable as table
where datepart(month, dbo.GetBirthdayFromJson(table.jsoncolumn)) == @somemonth
and datepart(year, dbo.GetBirthdayFromJson(table.jsoncolumn)) == @someyear
希望这会有所帮助