是否有可能在MS-SQL中有一个'持久'临时表?我的意思是我目前有一个后台任务,它生成一个全局临时表,由各种其他任务使用(这就是为什么我把它全局化).不幸的是,如果表未被使用,它会被SQL自动删除 - 这是由我的系统优雅地处理,因为它只是将它排队再次重建,但理想情况下我希望它只是每天构建一次.所以,理想情况下我可以设置类似设置一些超时参数的东西,比如"如果没有触及这个1小时,那么删除".
我真的不希望它在我现有的数据库中,因为它会导致负载更多与管理数据库相关的麻烦(碎片,日志增长等),因为它有效地汇总数据,仅在24小时内有用,并且占用更多超过一千兆字节的高清空间.
最糟糕的情况我的计划是在与tempdb相同的驱动器上创建另一个数据库,称之为类似PseudoTempDB,并且只是自己处理掉线.
任何见解将不胜感激!
除了可读性之外,在SQL中防止除以0错误时使用CASE WHEN语句与ISNULL/NULLIF有什么显着的好处?
CASE WHEN (BeginningQuantity + BAdjustedQuantity)=0 THEN 0
ELSE EndingQuantity/(BeginningQuantity + BAdjustedQuantity) END
Run Code Online (Sandbox Code Playgroud)
VS
ISNULL((EndingQuantity)/NULLIF(BeginningQuantity + BAdjustedQuantity,0),0)
Run Code Online (Sandbox Code Playgroud) 我有两张桌子,一张用于开口,另一张用于预订.预订表中的条目总是指开口,每个开口可能有多个预订.我想提取所有预订不同的开口bookingType 'C'.
例如
如果一个开口有3个A,B和C类型的预订,它不应该出现在结果中
如果开口只有A和B类型的预订,它应该显示在结果中
以下是我尝试过的但是它不正确,因为它失败了示例1:
select op.id, bo.id
from opening op
left join booking bo on bo.openingId = op.id
where bo.bookingType != 'C';
Run Code Online (Sandbox Code Playgroud)
以下是涉及时间间隔的完整查询:
select op.id, bo.id
from opening op
left join booking bo on bo.openingId = op.id
where ((bo.arrivalDate < '2009/06/20' AND bo.departureDate <= '2009/06/20') OR
(bo.arrivalDate >= '2009/06/27' AND bo.departureDate > '2009/06/27'))
Run Code Online (Sandbox Code Playgroud)
我习惯叫bookingType竟是通过两列定义的时间间隔arrivalDate和departureDate:在上面,我需要所有不具有之间的预订开口的例子20th June 2009和27th June 2009.
我不太确定这是否是正确的方法,这是我的情况:
目前,我想要选择15个画廊,然后离开通过ID与用户表连接,但我也想从不过从每个画廊一个随机的图片我知道你不能限制左连接(图片)到只拍摄一张随机图片而不做子查询.
这是我到目前为止所得到的,但它不能正常工作:
SELECT galleries.id, galleries.name, users.username, pictures.url
FROM galleries
LEFT JOIN users ON users.id = galleries.user_id
LEFT JOIN pictures ON (
SELECT pictures.url
FROM pictures
WHERE pictures.gallery_id = galleries.id
ORDER BY RAND()
LIMIT 1)
WHERE active = 1
ORDER BY RAND()
LIMIT 15
Run Code Online (Sandbox Code Playgroud)
我也尝试使用Active Record执行此操作但是在执行两次左连接后我遇到了问题,是否可以在此处获取子查询:
$this->db->select('galleries.id, galleries.name, users.id as user_id, users.username');
$this->db->from('galleries');
$this->db->join('users', 'users.id = galleries.user_id','left');
$this->db->join('pictures','pictures.gallery_id = galleries.id AND','left');
$this->db->where('active',1);
Run Code Online (Sandbox Code Playgroud)
我希望它不要乱,但我真的开始让所有的SQL查询混淆..
我们有一个webservice函数,它在后台运行一系列任务.当所有任务完成后,它将返回.我重新考虑了C#5的功能.我设法让以下代码段工作:
var result = new List<int>();
var tasks = new List<Task<int>>();
foreach (var row in rowlist)
tasks.Add(Task.Factory.StartNew(() => DoWork(row)));
foreach (var task in tasks)
result.Add(task.Result);
Run Code Online (Sandbox Code Playgroud)
该task.Result做的单个任务等待.我已经通过向DoWork方法添加三秒延迟并在不到5秒的时间内验证它完成测试,以获得10个任务的列表.
现在我尝试使用新async / await语法重写函数.但我似乎无法让它发挥作用.如果它编译,它会同步运行,通过添加等待验证.
关于如何使用重写上述代码段的任何想法async / await?
我想检索两个日期之间不同年份的列表.
例如,从25/12/2006to开始14/11/2013,结果应如下所示:
2006
2007
2008
2009
2010
2011
2012
2013
Run Code Online (Sandbox Code Playgroud)
这可能在SQL Server中吗?
简化,我有两个表,contacts和donotcall
CREATE TABLE contacts
(
id int PRIMARY KEY,
phone1 varchar(20) NULL,
phone2 varchar(20) NULL,
phone3 varchar(20) NULL,
phone4 varchar(20) NULL
);
CREATE TABLE donotcall
(
list_id int NOT NULL,
phone varchar(20) NOT NULL
);
CREATE NONCLUSTERED INDEX IX_donotcall_list_phone ON donotcall
(
list_id ASC,
phone ASC
);
Run Code Online (Sandbox Code Playgroud)
我想看看哪些联系人与DoNotCall手机的特定列表中的电话号码相匹配.为了更快地查找,我已经编入索引donotcall的list_id和phone.
当我进行以下JOIN时需要很长时间(例如9秒):
SELECT DISTINCT c.id
FROM contacts c
JOIN donotcall d
ON d.list_id = 1
AND d.phone IN (c.phone1, c.phone2, c.phone3, c.phone4)
Run Code Online (Sandbox Code Playgroud)

如果我在每个手机领域单独LEFT …
我的MySQL表中有一个dob字段date.只是一个小的,微不足道的例子是这样的:
mysql> select dob from players limit 5;
+------------+
| dob |
+------------+
| 1983-12-02 |
| 1979-01-01 |
| 1989-05-11 |
| 1976-03-24 |
| 1989-09-12 |
+------------+
Run Code Online (Sandbox Code Playgroud)
我试图用今天的日期计算小数点的年龄.所以从技术上讲,如果你的生日是1981年6月1日或1981-06-01,这将使你33岁,今天是6月7日..你将是33.(6/365) or 33.02 years old.什么是使用SQL计算这个的最简单的方法?
下面是列名元和表名层中的 json 数据。在这里,我通过元->“页面”检索“页面”键的数据,但我不知道如何获取“标签”键值,它是“字段”的数组元素,它又位于数组页面中。
{
"id":1,
"name":"org_details",
"action":"organisation.php",
"lable":"Manage Organisation",
"pages":[
{
"name":"Create Org",
"lable":"Organisation Name",
"fields":[
{
"id":11,
"type":1,
"subtype":1,
"lable":"Organisation Name"
},
{
"id":12,
"type":2,
"subtype":1,
"lable":"Description",
"mandatory":TRUE,
"validations":{
"minl":2,
"maxl":60
}
},
{
"id":13,
"type":3,
"subtype":1,
"lable":"Org. Type",
"default value":1,
"mandatory":TRUE,
"choices":[
{
"lable":"OFSDP",
"value":1
},
{
"lable":"AGRICULTURE",
"value":2
},
{
"lable":"HUTICULTURE",
"value":3
}
]
},
{
"id":14,
"type":4,
"lable":"checkbox",
"default value":1
},
{
"id":15,
"type":5,
"subtype":1,
"lable":"Upload",
"mandatory":TRUE
},
{
"id":16,
"type":6,
"subtype":1,
"lable":"GIS"
},
{
"id":17, …Run Code Online (Sandbox Code Playgroud) 我试图获取一个字符串,确定它是否是日期(日期时间或时间),然后使用 SQL Server 转换格式常量将其转换为相应的数据类型。但是,我在 127 "yyyy-mm-ddThh:mi:ss.mmmZ" 方面遇到了很多麻烦,因为 ISDATE 对于以这种方式格式化的字符串返回 false。
SELECT ISDATE('2018-07-21 15:14:00.5206914 -06:00') -- returns false
Run Code Online (Sandbox Code Playgroud)
这是为什么?是否有任何我不知道的内置 SQL Server 函数可以测试这是否是有效的日期字符串?
sql ×6
sql-server ×5
join ×2
mysql ×2
async-await ×1
c# ×1
c#-5.0 ×1
indexing ×1
json ×1
null ×1
php ×1
postgresql ×1
subquery ×1
tempdb ×1