Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

JSON_VALUE cho SQL Server 2012?

Chà vì có vẻ như chưa ai có gì để cung cấp, đây là đoạn mã tôi đã viết cho đến nay. Có lẽ nó sẽ giúp ích cho người tiếp theo trong vị trí của tôi. Tôi quyết định sử dụng các hàm riêng biệt tùy thuộc vào loại giá trị mà tôi đang truy xuất. Lưu ý đặc biệt là hàm date dùng để truy xuất một giá trị là số mili giây kể từ năm 1970 và hàm thập phân có một tham số để chỉ định giá trị đó có được trích dẫn hay không.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:xuất truy vấn dưới dạng tệp .txt

  2. 2 cách trả lại tên máy chủ trong SQL Server (T-SQL)

  3. tháng giữa hai ngày trong máy chủ sql với ngày bắt đầu và ngày kết thúc của mỗi ngày trong máy chủ sql

  4. Làm thế nào để tìm mức giao dịch hiện tại?

  5. Sử dụng thông tin đăng nhập SQL để mở tệp bằng OpenRowSet