标签: sql-function

如何在SQL Server 2008的存储过程中操作ntext类型数据

我想知道如何在SQL Server 2008的存储过程中操作ntext数据类型.我们在表中有一个类型为ntext的列.我们必须从该列获取数据,解析数据,更改然后将其存储回来.对于上述所有任务,我们必须使用一个或多个存储过程/函数.因此,还涉及存储过程之间的数据传递.

sql sql-server stored-procedures sql-function sql-server-2008

3
推荐指数
1
解决办法
4532
查看次数

如何在SQL中将单行拆分为多行

我有一个表如下所示..它有多个列用于不同的延迟

Date   API    Latency1_Avg Latency1_Min Latency1_Max Latency2_Avg Latency2_Min Latency2_Max
----   ---    ------------ ------------ ------------ ------------ ------------ ------------
7/26/13  Foo    12              35          45           453           433         435
7/26/13  Bar    33              33          33           234           243         234
Run Code Online (Sandbox Code Playgroud)

我想输出一个表,将每行分成多行,如下所示

Date    API   Latency  Aggregation  Value
----    ----  -------  -----------   -----
7/26/13 Foo   Latency1   Avg         12
7/26/13 Foo   Latency1   Min         35
7/26/13 Foo   Latency1   Max         45
7/26/13 Foo   Latency2   Avg         453
7/26/13 Foo   Latency2   Min         433
7/26/13 Foo   Latency2   Max         435
Run Code Online (Sandbox Code Playgroud)

.....

现在,我正在做的是这个

    SELECT 
    Date,
    API, 
   "Latency1" …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-function sqlperformance sql-server-2012

3
推荐指数
1
解决办法
2万
查看次数

ISNULL/COALESCE对应的非NULL值

是否存在类似COALESCE但不是值的函数NULL

如果返回字符串文字,我需要用另一个值替换标量值函数的返回值N/A.如果它会返回NULL我可以使用:

SELECT COALESCE(dbo.GetFirstSsnInFromSsnOut(RMA.IMEI), RMA.IMEI) AS [IMEI to credit]
     , OtherColumns
FROM dbo.TableName
Run Code Online (Sandbox Code Playgroud)

但既然它返回N/A这不起作用.我也可以用:

SELECT CASE WHEN dbo.GetFirstSsnInFromSsnOut(RMA.IMEI)='N/A' 
         THEN RMA.IMEI 
         ELSE dbo.GetFirstSsnInFromSsnOut(RMA.IMEI)
       END AS [IMEI To Credit]         
    , OtherColumns
FROM dbo.TableName
Run Code Online (Sandbox Code Playgroud)

但这样效率很低,因为它需要每个记录执行两次函数.

请注意,此查询位于表值函数中.

sql t-sql sql-server sql-server-2005 sql-function

3
推荐指数
3
解决办法
400
查看次数

在mysql中显示函数定义

我正在使用现有项目,但是我发现了一个具有sql-function的sql查询

SELECT * FROM money WHERE  amount = float_convert(0.1);
Run Code Online (Sandbox Code Playgroud)

该查询工作正常,但是我想查看和编辑函数float_convert();。

我已经尝试过SHOW FUNCTION STATUS

它仅显示函数状态,我需要查看函数定义。

mysql sql sql-function

3
推荐指数
1
解决办法
2400
查看次数

Postgres函数返回一行作为JSON值

我是PG的新手,并尝试从MSSQL转换.

我正在开发一个将返回JSON结果的函数.这个工作:

Create Or Replace Function ExampleTable_SelectList()
Returns JSON As
$$
  Select array_to_json(array_agg(row_to_json(t))) From
    (Select id, value1, value2, From ExampleTable) t
$$ Language SQL;
Run Code Online (Sandbox Code Playgroud)

现在,我想调用可以更新的返回值并将该值转换为JSON以返回.所以,这个给出了set命令的错误.

Create Or Replace Function ExampleTable_Update (id bigint, value1 text)
  Returns JSON As
$$
  Select row_to_json(t) From
  (
    Update ExampleTable
    Set Value1 = value1
    Where id= id
    Returning Value1, Value2;
  ) t
$$ Language SQL;
Run Code Online (Sandbox Code Playgroud)

我怀疑Postgres不允许将该UPDATE语句作为子查询.那还有吗?

postgresql json sql-function postgresql-9.4

3
推荐指数
1
解决办法
4175
查看次数

如何在一个函数中调用另一个函数

我需要编写一个脚本来创建并调用一个名为的函数fnItemTotal,该函数计算表中商品的总金额OrderItems(折扣价格乘以数量)。

为此,该函数应该接受一个商品 ID 参数,它应该使用我之前创建的 DiscountPrice 函数,并且应该返回该商品的总计值。


这是我创建的函数,它被创建了。但是当我尝试调用它时,它给出了错误。

CREATE FUNCTION fnItemTotal 
        (@ItemID INT )
    RETURNS MONEY
BEGIN
RETURN 
    (
        SELECT 
            ItemId,
            (SELECT * FROM dbo.fnDiscountPrice(ItemID) WHERE ItemID=@ItemID)*Quantity)--The fnDiscountPrice is the Other function i created.
        FROM 
            OrderItems
        WHERE 
            ItemID=@ItemID
    );
END 
GO
Run Code Online (Sandbox Code Playgroud)

这就是我用来称呼它的方式:

Select ItemID,dbo.fnItemTotal(ItemID) AS 'Total Price'
from OrderItems 
ORDER BY ItemID;
Run Code Online (Sandbox Code Playgroud)

这是我调用它时给我的错误:

消息 208,级别 16,状态 3,第 2 行 对象名称“dbo.fnDiscountPrice”无效。

sql t-sql sql-server sql-function sql-server-2012

3
推荐指数
1
解决办法
3万
查看次数

如何在Postgresql中创建条件插入函数?

我尝试编写一个函数,column3 根据表中的值在表中插入一些值,但我不太熟悉在 Postgresql 9.6 中编写函数。

--Create some table

    CREATE TABLE test(column1 INT, column2 INT, column3 TEXT) 
    INSERT INTO test VALUES(-8020,15),(-200,1),(23,115)

--Build function

    CREATE OR REPLACE FUNCTION new_function()
    RETURNS TEXT AS 
    $$
    BEGIN

        IF test(column1) <= -7000 THEN INSERT INTO test(column3) VALUES('small');
        ELSIF test(column1) >= -7000 AND test(column2) <= 15 THEN INSERT INTO test(column3) VALUES('nohello');
        ELSIF test(column1) >= -7000 ANDtable(column2) >= 15 THEN INSERT INTO test(column3) VALUES('test');
        ELSE INSERT INTO test(column6) VALUES("nodata");
        END IF;

    END;
    $$
    LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

结果应该是一个如下所示的表:

Column1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql case sql-function sql-update

3
推荐指数
1
解决办法
2779
查看次数

如果函数的参数与列名相同怎么办

我有一个 SQL 函数,其参数名称为 id。但是,我有一个具有相同名称 id 的列名。我如何告诉函数如何区分参数和列。如果我将参数名称从 id 更改为 num,我的函数可以完美运行,但这不是这里的选项,而且我也无法更改列名称。

create or replace function
    test(id integer) return text
as $$
    select address
    from customers c
    where c.id = id
$$ language sql;
Run Code Online (Sandbox Code Playgroud)

sql database postgresql sql-function

3
推荐指数
1
解决办法
1977
查看次数

SQL SERVER - COALESCE()函数的问题

我有这个SQL函数,它由一个存储过程包装:

ALTER FUNCTION dbo.GetObjList
(
    @filterUID int = NULL,
    @filterSID varchar(32) = NULL
)
RETURNS TABLE
AS

RETURN 

SELECT ROW_NUMBER() OVER (ORDER BY UID) AS [RowNumber], * 
FROM ObjTable
WHERE 
    (COALESCE(@filterUID, @filterSID) IS NULL) OR 
    (
        ((@filterUID IS NOT NULL) AND (UID = @filterUID)) OR
        ((@filterSID IS NOT NULL) AND (SID = @filterSID))
    )
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这样的错误:"将varchar值'abc'转换为数据类型int时转换失败." 如果我只@filterSID = 'abc'作为参数传递(和其他人的DEFAULT)?

我注意到COALESCE负责这个错误.

编辑:现在我得到了错误的原因...并且考虑到我实际上有很多参数...你们会推荐什么作为解决方案?

sql-server coalesce sql-function

2
推荐指数
1
解决办法
9834
查看次数

创建引用不存在的表或列的SQL函数(尚)

我想通过psql在空数据库中加载一些SQL函数:

psql -d my_database -f fuctions.sql --set ON_ERROR_STOP=1 
Run Code Online (Sandbox Code Playgroud)

我使用--set ON_ERROR_STOP=1是因为如果脚本包含错误,我希望psql失败.

内容functions.sql是:

CREATE or REPLACE FUNCTION test_function() RETURNS INT AS $$
  SELECT id from test_table;
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

我的问题是,psql检查test_table加载函数时是否存在并因此错误而失败:

ERROR:  relation "test_table" does not exist LINE 2: SELECT id from test_table;
Run Code Online (Sandbox Code Playgroud)

但我不希望psql检查表是否存在,因为我稍后会创建此表.

以下解决方法可行,但我无法使用它们:

  • 忽略错误.如果脚本包含ie sql语法错误,我希望psql退出时出错.
  • 使用plpgsql函数而不是sql.我当然可以,但简单的sql函数往往是最好的选择.
  • 首先创建表.我的真实场景实际上比这个例子更复杂.

postgresql plpgsql sql-function psql

2
推荐指数
1
解决办法
1653
查看次数