当前位置:首页 » 编程语言 » 距离查询sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

距离查询sql

发布时间: 2023-04-13 11:51:46

sql (mysql)怎么实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度

回答的有点晚,正好我做到相关的项目了,希望能帮到其他人.

餐馆申请时候通过填写的地址取得经纬度存入数据库,下面是查询某个经纬度附近500米的

$user_lat='41.749034'; //传过来的纬度
$user_lng='123.46017';//传过来的经度
$store_mod=db("store"); //数据库
$storelist=$store_mod->query("SELECT
*,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((".$user_lat."*PI()/180-【store_latitude】*PI()/180)/2),2)+COS(".$user_lat."*PI()/180)*COS(【store_latitude】*PI()/180)*POW(SIN((".$user_lng."*PI()/180-【store_longitude】*PI()/180)/2),2)))*1000)
AS distance FROM store HAVING 【搜索条件如 state=1】 distance<【周围距离多少米 如
500】 ORDER BY distance ASC");
var_mp($storelist);
【】sql语句中括号的store_latitude,store_longitude为你数据库存的商家经纬度的字段名,其余的为注释

② sql日期距今多少天

三十天。sql日期距今陪闷三十天。SQL语句计算距离生日还差几天原理很简单,将要比较的2个日期的年份统一成一样的,然后再使用胡空datediff函数芦做弯计算记录的数据和当前的日期比较得到相距的天数。

③ sql 查询 大于 并且距离 当前日期 最近的一条记录

可以参考以下几种方法:

1、sqlserver的语法:

select * from table t where t.date = ( select min( date ) from tablet1wheret1>= getdate() )

2、在oracle中可写成如下:

select * from 表 whereRQin (select min(RQ) from 表 whereRQ>sysdate);

(3)距离查询sql扩展阅读:

SQL参考语句

增加列

Alter table table_name add column_name column_type [default 默认值]--在表中增加一列,[]内的内容为可选项

删除列

Alter table table_name drop column column_name--从表中删除一列

添加主键

Alter table tabname add primary key(col)

④ 使用SQL查询出当前时间距离2020年1月1日还有多少分钟.

select datediff(mi,getdate(),'2020-1-1')
select datediff(hour,getdate(),'2020-1-1')
select datediff(second,getdate(),'洞游2020-1-1')
select datediff(day,getdate(),'2020-1-1')
select datediff(month,getdate(),'2020-1-1')
select datediff(week,getdate(),'2020-1-1')

DATEDIFF
返回跨两个指定日期的日期和时间边界数。

语法
DATEDIFF ( datepart , startdate , enddate )

参数
datepart

是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。

日期部分 缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms

startdate

是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。

如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止桐颤粗年所在世纪局镇相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。

有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。

enddate

是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

返回类型
integer

注释
startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。

当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。

计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之间的星期数是 1。

示例
此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO

⑤ SQL查询出距当前时间最近的一条或多条记录。

selecta.*from
表名asa,
(select物料,max(生效日期)as最新生效日期from表名groupby物料)asb
wherea.物料=b.物料anda.生效日期=b.最新生效日期

表名替换一下

⑥ Sql查询距离指定日期最近日期的一条数据

不同数据库有不同的写法,不过思路是一样的,就是字段的日期形式减去2008-12-20,然后取绝对值的最小值。找到这个最小值就可以了。
枚举2个数据库的写法
MS SQL SERVER,
select * from table_name
where abs(column_name-convert(datetime,'20081220',112)) in (
select min(abs(column_name-convert(datetime,'20081220',112))) from table_name)

ORACLE
select * from table_name
where abs(column_name-to_date('20081220','yyyymmdd')) in (
select min(abs(column_name-to_date('20081220','yyyymmdd'))) from
table_name
)

注:column_name字段需要时日期类型,如果不是需要做转换

⑦ sql server查询距离当前时间最近的一条记录,并且记录的时间大于当前时间

selecttopn*fromtablewherecreate_date>getdate()orderbycreate_dateASC

这个语句就行了,要拉几条就把n换成几

这个语句首先按时间筛选大于当前时间的,然后按时间排序,从小到大排序,所以排前面的是离现在比较近的时间

⑧ sql 查询 大于 并且距离 当前日期 最近的一条记录

可以参考以下几种方法:

1、sqlserver的语法:

select * from table t where t.date = ( select min( date ) from tablet1wheret1>= getdate() )

2、粗哪卖缓森在oracle中可写成如下岩逗:

select * from 表 whereRQin (select min(RQ) from 表 whereRQ>sysdate);

(8)距离查询sql扩展阅读:

SQL参考语句

增加列

Alter table table_name add column_name column_type [default 默认值]--在表中增加一列,[]内的内容为可选项

删除列

Alter table table_name drop column column_name--从表中删除一列

添加主键

Alter table tabname add primary key(col)

⑨ sql (mysql)怎么实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度

mysql两点间距,你也自己弄成函薯山歼数x0dx0ax0dx0a公式如下,单位米:x0dx0a第一点经纬度:lng1 lat1x0dx0a第二唯慎点经纬度:数冲lng2 lat2x0dx0around(6378.138*2*asin(sqrt(pow(sin(x0dx0a(lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)*x0dx0apow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)x0dx0ax0dx0a例如:x0dx0aSELECT store_id,lng,lat,x0dx0aROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000)x0dx0aASx0dx0a julix0dx0aFROM store_infox0dx0aORDER BY juli DESCx0dx0aLIMIT 316

⑩ 用sql语句查询离过年还有几天

思路:

1、首先你要知道哪年的春节是哪天

2、其次还要知道现在是哪年,然后利用函数【datediff】求出距离最近的春节天派激数差值

解决方法:

下面是十年以内的春节日期

2016年2月8号,2017年1月28号,2018年2月16号,2019年2月5号,2020年1月25号,2021年2月12号,2022年2月1号,2023年1月22号,2024年2月10号,2025年1月29号

然后处理SQL语句是:


select
top1
DATEPART(yyyy,chunjie)春节年份,
DATEDIFF(DD,GETDATE(),chunjie)距离尘蔽袜春节剩余天数
from
(
select'2016-2-8'chunjieunionall
select'2017-1-28'unionall
select'2018-2-16'unionall
select'2019-2-5'unionall
select'2020-1-25'并敏unionall
select'2021-2-12'unionall
select'2022-2-1'unionall
select'2023-1-22'unionall
select'2024-2-10'unionall
select'2025-1-29'
)a
where
DATEDIFF(DD,GETDATE(),chunjie)>=0
orderby
DATEDIFF(DD,GETDATE(),chunjie)