sqlserver

SqlServer数据查找距离指定坐标附近的数据(一)

我与影子孤独终老i 提交于 2019-12-17 17:59:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 实现原理,根据球面计算公式,计算两点间的距离。 由于地球是一个不规则的椭球体,当前计算方法,还是有很大的误差在。但能基本实现附近查询。 函数:返回两个坐标之间的公里数 /****mssql函数:计算经纬度****************************/ create FUNCTION [GetDistance] ( @GPSLng DECIMAL(12,6), @GPSLat DECIMAL(12,6), @Lng DECIMAL(12,6), @Lat DECIMAL(12,6) ) RETURNS DECIMAL(12,4) AS BEGIN DECLARE @result DECIMAL(12,4) SELECT @result=6371.004*ACOS(SIN(@GPSLat/180*PI())*SIN(@Lat/180*PI())+COS(@GPSLat/180*PI())*COS(@Lat/180*PI())*COS((@GPSLng-@Lng)/180*PI())) RETURN @result END 使用示例: --查找数据库中5公里内的记录 select * from ( SELECT dbo.GetDistance(36.6513750000,116.9046970000

sqlserver设置查询sql用时和资源占用

大城市里の小女人 提交于 2019-12-17 09:37:13
1.工具-选项-查询执行-sqlserver - 高级- 勾选set statistics time(e) 2.然后执行自己的sql语句 select top 50 * from pagetest where id not in ( select top 78600 id from pagetest order by id ) order by id --耗时110毫秒 3.想要的查询用时等消息就在 并列的消息里面 来源: CSDN 作者: milijiangjun 链接: https://blog.csdn.net/milijiangjun/article/details/103490896

【SQL】SQL分页查询总结

こ雲淡風輕ζ 提交于 2019-12-17 04:39:51
开发过程中经常遇到分页的需求,今天在此总结一下吧。 简单说来方法有两种,一种在源上控制,一种在端上控制。源上控制把分页逻辑放在SQL层;端上控制一次性获取所有数据,把分页逻辑放在UI上(如GridView)。显然,端上控制开发难度低,适于小规模数据,但数据量增大时性能和IO消耗无法接受;源上控制在性能和开发难度上较为平衡,适应大多数业务场景;除此之外,还可以根据客观情况(性能要求,源与端的资源占用等)在源和端之间加一层,应用特殊算法和技术进行处理。以下主要讨论源上,即SQL上的分页。 分页的问题其实就是在满足条件的一堆有序数据中截取当前所需要展示的那部分。实际上各种数据库都考虑到分页问题而内置了一些策略,比如MySql的LIMIT,Oracle的ROWNUM和ROW_NUMBER(),SqlServer的TOP和ROW_NUMBER(),基于此我们可以得到一系列分页的方法。 1、 基于MySql的LIMIT和Oracle的ROWNUM,可以直接限制返回区间(以MySql为例,注意使用Oracle的ROWNUM时要应用子查询): 方法一、直接限制返回区间 SELECT * FROM table WHERE 查询条件 ORDER BY 排序条件 LIMIT ((页码-1)*页大小),页大小; 优点:写法简单。 缺点:当页码和页大小过大时,性能明显下降。 适用:数据量不大。 2

The conversion to class java.time.LocalDateTime is unsupported.

会有一股神秘感。 提交于 2019-12-16 19:42:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> mssql-jdbc 对于java8的LocalDate,LocalTime,LocalDatetime的转换异常 先说下解决方法: 1. 降级Mybatis至3.5.0及以下; 2. 或升级mssql-jdbc驱动至7.1.0及以上 原文地址 : https://blog.csdn.net/qq_24505485/article/details/103540439 解决过程 之前实体类使用的是Timestamp 来存储时间,没有错,后来使用了LocalDatetime来存储也没错,再之后我把 Mybatis从3.5.0升级到了3.5.1之后 ,(mssql-jdbc的版本是com.microsoft.sqlserver:mssql-jdbc: 6.4.0.jre8 )LocalDatetime的转换就会抛异常: com.microsoft.sqlserver.jdbc.SQLServerException: The conversion to class java.time.LocalDateTime is unsupported. at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getObject(SQLServerResultSet.java:2249

Sqlserver存储过程—----传递数组、使用循环

梦想的初衷 提交于 2019-12-16 10:03:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 背景: 前一段时间做过一个公司内部的员工项目管理系统,其间有个 sqlserver 存储过程是要从 excel 文件中读取员工的项目信息,并从 db 中找出相关的的其他信息插入到一张员工表中。这里涉及两个难点:怎么向存储过程传递多条记录?在存储过程中怎么对这些记录一条条循环处理。 解决方案: 1. 怎么将 excel 中数据传入到存储过程中? 存储过程是没有办法接受数组参数的,我的做法是先把 excel 中的信息导入到一张全局的临时表中,在把临时表的表名传递给存储过程,在存储过程中使用临时表内容。 2. 怎么在存储过程中做循环处理? 在存储过程中新建一张临时表,将传递过来的全局临时表的信息保存在该表中,并且在表中添加一个 id 列,对记录从一开始计数。使用 count 函数计算记录的个数,使用 while 语句对 id 从 1 到 count 进行循环 代码: 1.创建临时表: IF OBJECT_ID('dbo.create_tempTable') IS NOT NULL DROP PROC dbo.create_tempTable; GO CREATE PROC dbo.create_tempTable AS CREATE TABLE ##tempexcel( pjid char(6),--项目id

SqlServer到MySql的转换

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-13 17:31:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近在做将Discuz!NT移植到mono+MySql环境,由于最新版本的Discuz!NT仅支持SqlServer,所以要移植首先是要增加Discuz.Data.MySql这个namespace,实现IDataProvider接口。所以,绝大部分工作就是SqlServer中函数和存储过程的移植。下面随着移植工作的进行,将要点做一些记录,备用。 格式:SqlServer MySql 1、DATEDIFF(n, [lastpost], GETDATE()) TIMESTAMPDIFF(minute, `lastpost`, NOW()) 2、SELECT TOP 1 `{0}` FROM `{1}forumfields` WHERE `fid`={2} SELECT `{0}` FROM `{1}forumfields` WHERE `fid`={2} LIMIT 0,1 3、SELECT ISNULL(MAX([tid]), 0) FROM [{0}] SELECT IFNULL(MAX(`tid`), 0) FROM `{0}` 4、SELECT SCOPE_IDENTITY() SELECT LAST_INSERT_ID() 5、SELECT CHARINDEX(',','aaa,bbb') SELECT

sqlserver计算时间差DATEDIFF 函数

删除回忆录丶 提交于 2019-12-13 16:56:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 功能     返回两个日期之间的间隔。 语法     DATEDIFF ( date-part, date-expression-1, date-expression-2 ) date-part :     year | quarter | month | week | day | hour | minute | second | millisecond 参数     date-part 指定要测量其间隔的日期部分。   有关日期部分的详细信息,请参见日期部分。   date-expression-1 某一间隔的起始日期。从 date-expression-2 中减去该值,返回两个参数之间 date-parts 的天数。   date-expression-2 某一间隔的结束日期。从该值中减去 Date-expression-1,返回两个参数之间 date-parts 的天数。 注:一般在使用时间差判断时需要制定的 表达式>数字 ,方式,比例注册大于3天的会员 DATEDIFF(day,'xxx','xxx')>3,如果要小于制定天数或月份则 表达式<=数字; 注:若不是日期整数倍则截断 推荐方法:例如获取大于3个月的数据,当前时间向前推3个月,如果比注册时间大则,满3个月 用法    

BI方案用哪家?现在早已是国产BI工具的天下了!

南笙酒味 提交于 2019-12-11 13:52:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近有一些粉丝问我,公司要上BI了,tableau、powerbi、SAP Business Objects等等哪个更好,根本没咱们国产BI工具什么事儿。 好像说到上BI,很多人的第一反应都是上国外的,觉得国外的BI的厂商发展的那么早,国产BI工具肯定不如国外BI工具,如果你有这个想法,那就大错特了。在BI商业智能这个赛道,国产BI工具可以说是不输国外的。 当然,这里的“跑赢”并不是说在各方面完胜,国外BI工具在技术上确实更加成熟,毕竟早发展这么多年,每个工具也都有各有自己的优劣,无法用一句话去说明哪个工具最好用。但是基于中国这个大市场环境下,国内企业选择国产BI工具是更优的选择。并且在《IDC2018年中国商业智能软件市场追踪报告》中,领跑第一位的也是国内某BI厂商。 作为一个做了十多年BI项目的“老BI人”,在这方面也算有点经验,下面就来给大家说道说道,为什么国产BI工具是国内企业的更优选择。 1.从工具与企业的需求契合度来看,国产BI工具更契合中国企业的需求 中国的企业类型丰富多样,在企业IT建设的建设方式上也是各有千秋。数据库、数据的规范性、系统的开发集成需求也是各不相同。BI除了需要支持各种类型的数据库和数据源,还要支持Hadoop、Kylin、Derby、Gbase一类的大数据平台以及各种数据仓库

Oracle转SqlServer

被刻印的时光 ゝ 提交于 2019-12-11 08:30:26
基础数据所对应的类型不同 在Oracle中有一些基础类型与Sqlserver中名字一样,但是所存储的数据格式不同,Date类型在Oracle中精确到秒,在Sqlserver中只能精确到分 表的结构 Oracle中所有的表都有一个共同的字段,rowid这是在物理上存在的,记录了每一条记录的行位置,rownum 是逻辑上的,根据排序方式的不同会出现不同的rownum,因为Oracle的这个特性,经常在进行一些crud操作的时候会通过rowid来进行,导致在转数据库的时候会遇到各种麻烦,所以我建议各位不管是使用哪一种数据库最好是使用标准sql,并且不要太依赖某种数据库的特性。我开始是想通过row_number()加with as 去代替rowid,但是总会出现一些奇怪的问题,你前一次查询的id,重新进入数据库操作的时候改变的是另外一条记录,最后的解决方式我把每一张表都添加上了rowid Oracle的to_date,to_char方法 在转Oracle数据库的时候这两个方法出现了很多次,看他们的名字就知道是干什么的,Sqlserver中没有这样的方法,但是有conver,cast方法这两个方法可以实现Oacle两个方法的所有功能 Oracle的NVL方法可以用isnull代替 在Oracle中子查询语句可以有order by,而在sqlserver需要添加top()函数