前言

在批量导入Excel中的数据时发现出生日期为整数也就是为天数,结果倒腾了翻,这是其一,其二是数据库中的某一列存的是JSON数据,但是场景是为了作为作业来运行,此时不得不将筛选出的数据手动拼接成JSON,给需要的童鞋铺一点路。

日期问题

在Excel中我们给出的出生日期则是正确的日期格式,比如如下:

但是呢,当我们导入数据时发现将其日期转换成了天数,这其实也没什么问题,但是项目是在.NET Core中,则出现了一点问题,在.NET Framework中,如果我们获取到的出生日期是double型数字即天数时,我们该如何将其转换为对应的日期呢,请看如下:

 var birthDate = DateTime.FromOADate();

此时我们通过 DateTime.FromOADate 方法能够解析出日期,下面我们再来看看目前.NET Core版本为1.1中的情况:

此时你会发现如下在.NET Core 1.1中并未有此方法。

既然在Excel导入时为天数我们将日期添加天数不就行了吗,在NET Core 1.1中只能通过手动去转换了。我们来看下:

 var birthDate = DateTime.Now.AddDays(-);

此时得到的日期如下:

我们上述通过.NET Framework中的得到的日期为 -- 而此时得到的却为 -- ,转换失败。上述我们是通过当前日期去减去天数导致转换失败,此时我们改变思路,从某个日期加上这个日期是不是就可以了呢。日期最小从 -- 开始,所以我们接下来进行下操作:

var birthDate = new DateTime(, , ).AddDays();

此时得到的结果如下:

上述演示得到的结果为 -- ,而我们在Excel中的日期为 -- 后经过查阅资料发现,这个是Excel中的一个Bug,此时我们还需要进行如下操作才行。

            var days = ;
if(days>)
days-=;
var birthDate = new DateTime(, , ).AddDays(days);

在Excel中的日期多加了一天,类似如下:

想到这里,从正向角度去看待,Excel中我们定义为日期型,而为何会进行转换为天数了呢,我们看看Excel中格式设置。

原来是这样,默认是常规,那么我们是否可以设置自定义日期格式呢。

我们自定义格式为日期格式就不用再去读取时进行转换了,岂不爽哉,我们看看结果:

无论是从根本和利用代码去转换皆可解决问题,上述我们从Excel问题出发估计还保险一点。

SQL Server数据转换为JSON

利用代码转换为JSON简直是SO EASY。但是上述也已经表明了场景,直接通过存储过程筛选数据并将数据存储为JSON字符串来进行短信通知,下面我们来看看,创建测试表。

CREATE TABLE ProductList
(Id INT IDENTITY(,) PRIMARY KEY,
ProductName VARCHAR(),
Price NUMERIC(,),
Quantity INT, Inserton DATETIME
)

插入测试数据:

INSERT INTO  ProductList
(
ProductName,
Price,
quantity,
Inserton
)
VALUES ('Digital camera',,,getdate()),('Laptop',,,getdate())

接下来我们要将其先转换为XML,通过FOR XML PATH,如下:

SELECT *
FROM ProductList
FOR XML PATH('Jeffcky')

上述就无需我再多讲,FOR XML PATH参数定义为XML根节点名称

展开XML,则是如下XML数据

在SQL Server 2016有了对JSON解析的支持还是挺好,在SQL Server 2012中没有只能借用STUFF函数来拼接了。

DECLARE @content VARCHAR(MAX)

SET @content = (SELECT '['+
STUFF(
(
SELECT TOP ',
{"ProductName": "' + ProductName + '",
"Price": "' + CONVERT(VARCHAR, Price) + '",
"Quantity": "' + CONVERT(VARCHAR, quantity) + '",
"Inserton": "' + CONVERT(VARCHAR, Inserton, 105) + '"}'
FROM ProductList
FOR XML PATH('')), , ,''
)
+ ']'[ProductDetail]) PRINT @content

此时我们发现多了 &#x0D 恰巧应该是换行导致的,我们将其放在一行数据上即可。

DECLARE @content VARCHAR(MAX)

SET @content = (SELECT '['+ STUFF((SELECT TOP 2 ',{"ProductName": "' + ProductName + '","Price": "' + CONVERT(VARCHAR, Price) + '","Quantity": "' + CONVERT(VARCHAR, quantity) + '","Inserton": "' + CONVERT(VARCHAR, Inserton, 105) + '"}' FROM ProductList
FOR XML PATH('')), , ,''
)
+ ']'[ProductDetail]) PRINT @content

此时则能正常输出:

总结

.NET Core 1.1中尚未有将天数转换成日期的APi,期待2.0能有更多的APi供我们使用。

.NET Core 1.1日期解析无APi、SQL Server数据转换JSON的更多相关文章

  1. EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的

    我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...

  2. 三种数据库日期转字符串对照sql server、oracle、mysql(V4.11)

    三种数据库日期转换对照: http://blog.csdn.net/zljjava/article/details/17552741 SQL类型转换函数:cast(type1 as type2) 数据 ...

  3. asp.net core 2.1 增加Nlog日志到sql server数据库

    一.增加引用 <PackageReference Include="NLog.Extensions.Logging" Version="1.2.1" /& ...

  4. 最简单 无返回值 无参数 sql server存储过程

    CREATE proc Upadte_stateas update Table_1 set [state]=2 where id in (select id from Table_1 where st ...

  5. SQL Server 日期相关

    原文:SQL Server 日期相关 原帖出处:http://blog.csdn.net/dba_huangzj/article/details/7657979 对于开发人员来说,日期处理或许简单,或 ...

  6. TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE

    TransactionScope事务处理方法介绍及.NET Core中的注意事项   作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...

  7. access日期与sql server日期区别

    如选取一段时间内的数据,time1和time2是时间起始字符串,则 sql server命令: string strSQL=" 日期 >='"+time1+"' A ...

  8. SQL Server日期函数之获得一个月中的天数

    SQL Server日期函数之获得一个月中的天数在实际中的应用比例还是占为多数的,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱,望会在以后的学习或是工作中带来很大的帮助. 获得一个月 ...

  9. SQL Server 取日期时间格式 日期与字符串之间的转换

    SQL Server 取日期时间部分   在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate()  用DateName()就可以获得相应的 ...

随机推荐

  1. SQL 日期筛选的两种方式

    主要解决的是后一天的问题~容易漏掉最后一天~第一种方法,拼接String,第二种方法直接在最后一天加一天 第一: <if test="beginDate != null and beg ...

  2. 利用Navicat实现MySQL数据库结构对比和同步

    在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create.modify.drop等进 ...

  3. Java线程:锁

    一.锁的原理 Java中每个对象都有一个内置锁,当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行的代码类的当前实例(this实例)有关的锁.获得一个对象的锁也称为获取锁.锁 ...

  4. iis的web站点配置

    1.下载好pageadmin网站系统,我下载的放在F:\web\site目录下(每个电脑或每个用户放置目录都不一样,你也可以放C:\myweb,或D:\xxx等等,只要下面对应目录设置一样即可),我们 ...

  5. mac命令行对复杂ipa包重新签名

    最近在做ios的自动化平台,需要通过命令行安装卸载ipa包 好了问题来,别人上传的ipa包,很可能是开发签名了只能在特定手机上安装的测试ipa包,那我们如何将其安装在我们的自动化的iphone上呢? ...

  6. Bootstrap入门(十三)组件7:导航条

    Bootstrap入门(十三)组件7:导航条 1.默认样式的导航条 2.嵌入表单和按钮 3.嵌入文本和非导航的链接 4.组件排列和下拉菜单 5.固定在顶部/底部 6.反色的导航条 7.路径导航 首先先 ...

  7. 设计模式之单一职责原则(SRP)

    自己之前写过一些关于设计模式的博客,但是大部分都写得比较匆忙.现在正好趁年前有时间,笔者打算好好地整理一下自己这块知识结构.开篇的第一个原则就是设计原则里面最简单的一个原则--单一职责原则. 想必大家 ...

  8. CodeForces 456A

    Laptops Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  9. ReentrantLock获取、释放锁的过程

    看了篇文章,觉得分析得很透彻,其后总结的很到位,地址:http://www.iteye.com/topic/1083832 把获取与释放操作串在一起在简单看一下: 获取锁的时候将当前线程放入同步队列, ...

  10. 深入浅出 Java Concurrency 锁机制 : AQS

    转载:http://www.blogjava.net/xylz/archive/2010/07/06/325390.html 在理解J.U.C原理以及锁机制之前,我们来介绍J.U.C框架最核心也是最复 ...