我的表结构如下,
CREATE TABLE tbl_Info
(
[SSEID] BIGINT NOT NULL IDENTITY(1,1),
[ShortenKey] AS ConvertToBase([SSEID]),
[Title] VARCHAR(500) NULL,
)
Run Code Online (Sandbox Code Playgroud)
ConvertToBase 跟随功能
CREATE FUNCTION ConvertToBase(@Number BIGINT)
RETURNS VARCHAR(15)
AS
BEGIN
// implementation
END
Run Code Online (Sandbox Code Playgroud)
我需要在INSERT查询后获取生成的[ShortenKey]值。这该怎么做 ?
sql-server calculated-columns sql-function autogeneratecolumn
请考虑下表:
id a b
--------------
1 5 1
2 2 3
3 4 2
4 3 6
5 0 1
6 2 2
Run Code Online (Sandbox Code Playgroud)
我想按max(a,b)降序排序,结果将是:
id a b
--------------
4 3 6
1 5 1
3 4 2
2 2 3
6 2 2
5 0 1
Run Code Online (Sandbox Code Playgroud)
执行此类排序的SQL查询是什么?
我想将列的值除以另一列的值,并将结果显示为单独的列
例如:
project name total-percent no.of screen ------------ -------------- ------------- pro-1 150 5 pro-2 50 3
现在我想将总百分比除以no.of屏幕,并将结果显示在另一列中
就像round向上或向下舍入一样,尽管您可以控制小数点,但不能在我的情况下使用它。
问题是floor和ceil不允许控制小数点,在地板上,你可以使用的情况下truncate,这将变成:
123.1233到123.12,这是基本相同的。
但是,在小区的情况下,当你想打开123.123来123.13。如何才能做到这一点?
我试图在SQL Server中创建一个表值函数.我的问题是我找不到适合SQL的语法.我一直在收到错误.我不知道是否可以execute()在表值函数中使用方法.我尝试声明和设置变量,并在oridinary sql查询中使用execute方法,它的工作原理.
我的SQL:
CREATE FUNCTION SortRoutePartByDay
(
@date datetime
)
RETURNS TABLE
AS
Begin
declare @cmdtext varchar(max)
declare @Daynameofweek varchar(10)
set @Daynameofweek = datename(weekday, @date)
set @cmdtext = 'select * from RoutePartPart where ' +@Daynameofweek+' =1';
RETURN
(
execute(@cmdtext)
)
GO
Run Code Online (Sandbox Code Playgroud)
到目前为止我的错误是:
消息156,级别15,状态1,过程SortRoutePartByDay,第21行
关键字'execute'附近的语法不正确.
消息102,级别15,状态1,过程SortRoutePartByDay,第23行
')'附近的语法不正确.
RoutePartPart DDL:
CREATE TABLE [dbo].[RoutePartPart](
[RouteID] [int] NOT NULL,
[RoutePartNo] [smallint] NOT NULL,
[RoutePartPartNo] [smallint] NOT NULL,
[PickupAreaGrpID] [int] NULL,
[DeliveryAreaGrpID] [int] NULL,
[Monday] [bit] NULL,
[Tuesday] [bit] NULL,
[Wednesday] [bit] …Run Code Online (Sandbox Code Playgroud) 我有一个带有slug字段的表.通过操纵另一个字段,可以通过函数自动填充此字段吗?
就像是:
INSERT INTO people('name','slug') VALUES ('xxxx',SLUG(name));
Run Code Online (Sandbox Code Playgroud) 是否有任何SQL函数可用于返回所有那些最后2个数字大于31的记录.基本上,有一列:INT数据类型中的OpenDate存储为'19810281',后两个值为81(应该是一个日期)所以它有错误的数据.
我想查询所有那些最后2列数的坏记录:OpenDate大于31?任何建议将不胜感激.
我的功能看起来像这样:
CREATE FUNCTION fn_FileSys_DirExists(@dirName AS nvarchar(260))
RETURNS bit
AS
BEGIN
DECLARE @dirExists int
DECLARE @fileResults TABLE
(
file_exists int,
file_is_a_directory int,
parent_directory_exists int
)
INSERT @fileResults (file_exists, file_is_a_directory, parent_directory_exists)
EXEC master.dbo.xp_fileexist @dirName
SELECT @dirExists = file_is_a_directory FROM @fileResults
RETURN @dirExists
END
Run Code Online (Sandbox Code Playgroud)
当我尝试执行上面的SQL时,我收到以下错误:
在函数中无效使用副作用运算符'INSERT EXEC'.
我认为函数中的表变量的操作不被视为副作用操作?
t-sql sql-server sql-function table-variable sql-server-2012
我有以下功能“TicksToDateTime”
CREATE FUNCTION [dbo].[TicksToDateTime] (@t bigint)
RETURNS datetime
WITH SCHEMABINDING
AS
-- converts the given datetime to .NET-compatible ticks
-- see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatetimeclasstickstopic.asp
BEGIN
declare @result datetime
if (@t=0)
set @result = null
else
if (@t < 552877919999983334)
set @result = cast ('1753-1-1' as datetime)
else
if (@t=3155378975999999999)
set @result = cast ('9999-12-1' as datetime)
else
set @result = CAST((@t - 599266080000000000) / 10000000 / 24 / 60 / 60 AS datetime)
return @result
END
GO
Run Code Online (Sandbox Code Playgroud)
并在表的计算列中使用它:
[CallDateRaw] BIGINT NOT NULL, …Run Code Online (Sandbox Code Playgroud) 有一个查询,它做这样的事情:
select * from cars c where c.WheelCount > 0 or CountWheels(c) > 0
Run Code Online (Sandbox Code Playgroud)
该函数是CountWheels为每一行调用,还是只为那些行调用t.Count <= 0?
问题是该函数包含每次都应该执行的逻辑——很可能是一个糟糕的设计;这是我几乎无法控制的代码的一部分。
这是一个简化的例子,我不能只写,select * from cars c where CountWheels(c.Body) > 0因为这会删除一些数据。把它想象成:给我所有曾经有轮子的汽车,即使其中一些现在可能有 0 个轮子。
sql-function ×10
sql ×8
sql-server ×4
mysql ×3
case ×1
function ×1
oracle ×1
sql-order-by ×1
t-sql ×1
where-clause ×1