sql >> Database >  >> RDS >> Sqlserver

JSON_VALUE voor SQL Server 2012?

Omdat het lijkt alsof niemand nog iets te bieden heeft, is hier de code die ik tot nu toe heb geschreven. Misschien helpt het de volgende persoon in mijn schoenen. Ik besloot om met afzonderlijke functies te gaan, afhankelijk van het type waarde dat ik ophaal. Van bijzonder belang is dat de datumfunctie is voor het ophalen van een waarde die gelijk is aan het aantal milliseconden sinds 1970, en de decimale functie heeft een parameter om aan te geven of de waarde al dan niet tussen aanhalingstekens staat.

create function [dbo].[GetJsonDateValue](@Key varchar(100), @data nvarchar(max))
returns datetime
as
begin
    declare @keyIdx int = charindex(@Key, @data)
    declare @valueIdx int = @keyIdx + len(@Key) + 2 -- +2 to account for characters between key and value
    declare @termIdx int = charindex(',', @data, @keyIdx)

    -- In case it's last item in an object
    if @termIdx = 0
    set @termIdx = charindex('}', @data, @keyIdx)

    declare @valueLength int = @termIdx - @valueIdx
    declare @secondsSince1970 bigint = cast(substring(@data, @valueIdx, @valueLength) as bigint) / 1000

    declare @retValue datetime = dateadd(s, @secondsSince1970, '19700101')
    return @retValue
end
GO

CREATE function [dbo].[GetJsonDecimalValue](@Key varchar(100), @data nvarchar(max), @quoted bit)
returns decimal(9,2)
as
begin
    declare @keyIdx int = charindex(@Key, @data)
    declare @valueIdx int = @keyIdx + len(@Key) + 2 -- +2 to account for characters between key and value
            + case when @quoted = 1 then 1 else 0 end -- +1 more for quote around value if present
    declare @termIdx int = charindex(case @quoted when 1 then '"' else ',' end, @data, @valueIdx)

    -- In case it's last item in an object and not quoted
    if @quoted = 0 and @termIdx = 0
    set @termIdx = charindex('}', @data, @keyIdx)

    declare @valueLength int = @termIdx - @valueIdx

    if @valueLength = 0
    return null

    declare @retValue decimal(9,2) = cast(substring(@data, @valueIdx, @valueLength) as decimal(9,2))
    return @retValue
end
GO

CREATE function [dbo].[GetJsonStringValue](@Key varchar(100), @data nvarchar(max))
returns varchar(max)
as
begin
    declare @keyIdx int = charindex(@Key, @data)
    declare @valueIdx int = @keyIdx + len(@Key) + 3 -- +3 to account for characters between key and value
    declare @termIdx int = charindex('"', @data, @valueIdx)

    declare @valueLength int = @termIdx - @valueIdx
    declare @retValue varchar(max) = substring(@data, @valueIdx, @valueLength)
    return @retValue
end
GO


  1. Hoe om te gaan met meerdere objecten met behulp van Object Explorer Detail Windows in SSMS - SQL Server / TSQL-zelfstudie, deel 22

  2. verander innodb_log_file_size variabele waarde voor Amazon RDS MYSQL Linux-server

  3. SQL Bevolken met verschillende gegevens en een reeks

  4. Alleen-lezen- en lees-schrijftransacties splitsen met JPA en Hibernate