MSSQL字符串函数问题 解决好加分!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSSQL字符串函数问题 解决好加分!!相关的知识,希望对你有一定的参考价值。

MSSQL数据库
SQL语句中的日期或者说连接字符出了问题

目的是取现在客户端日期中的“年”,如2009
再取一个数据库中日期字段中的“月”和“日”,如8和1
组成字符“2009-8-1”输出

我是这么写的,但是输出结果却是2020(结果是2009+8+1)

SELECT Datepart(yyyy,getdate())+'-'+Datepart(m,[日期字段])+'-'+Datepart(d,[日期字段]) AS dd from [数据表] where [id]=4"

请问怎么写才能输出字符“2009-8-1”,而非相加结果2020

SELECT replace(
convert(char(4),Datepart(yyyy,getdate()))
+'-'+
convert(char(2),Datepart(m,[日期字段]))
+'-'+
convert(char(2),Datepart(d,[日期字段])),' ','') AS dd
from [数据表] where [id]=4"

补充说明:SqlServer中 【+】 只有在连接字符串的时候才能起到连接的作用,用【convert】 转一下就可以了。

---
以上,希望对你有所帮助。
参考技术A 不能用‘+’号的,用了就是‘-’转换了类型,变成了计算表达式,你用concat 函数来连接试试

是否可以在没有准备好的语句(Node.js 和 MSSQL)的情况下防止 SQL 注入

【中文标题】是否可以在没有准备好的语句(Node.js 和 MSSQL)的情况下防止 SQL 注入【英文标题】:Is it possible to prevent SQL injection without prepared statements (Node.js & MSSQL) 【发布时间】:2018-02-21 16:27:35 【问题描述】:

是否可以简单地从用户输入中转义危险字符,然后直接运行 SQL 查询,而不是使用准备好的语句?

例如,我可以只在输入上使用以下函数,构建查询然后执行它吗?

function mysql_real_escape_string (str) 
    return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) 
        switch (char) 
            case "\0":
                return "\\0";
            case "\x08":
                return "\\b";
            case "\x09":
                return "\\t";
            case "\x1a":
                return "\\z";
            case "\n":
                return "\\n";
            case "\r":
                return "\\r";
            case "\"":
            case "'":
            case "\\":
            case "%":
                return "\\"+char; // prepends a backslash to backslash, percent,
                                  // and double/single quotes
        
    );

【问题讨论】:

也许这可以帮助你github.com/mysqljs/mysql#escaping-query-values 这绝对是XY Problem 的情况,绝不应该出现直接运行查询并手动尝试避免注入比准备语句更安全或更好的情况。你需要这个做什么? 基本上,我花了一整天的时间试图弄清楚如何使用准备好的语句(用于 Node.js 和 MSSQL),但我运气不佳。 (我是这个的新手)。我希望有一个简单的替代方案。 mysqljs 是提供preparedstatement和转义方法的库之一 对于图灵完备的 SQL 版本,阻止所有可能输入的 SQL 注入就相当于解决了停机问题。 【参考方案1】:

创建存储过程。构建数据访问层/服务。从应用程序调用服务上的方法,从应用程序传递适当的方法参数。

在我的 Angular 代码中,我从一个数据存储层调用,该数据存储层实现为在我的组件中注入的服务。

【讨论】:

以上是关于MSSQL字符串函数问题 解决好加分!!的主要内容,如果未能解决你的问题,请参考以下文章

mssql sqlserver 验证整型函数分享

MSSQL WAF绕过

[转]史上最全的MSSQL复习笔记

使用 PHP 和 MSSQL 准备好的语句

MSSQL中 数值类型转换为千分号的解决方案

是否可以在没有准备好的语句(Node.js 和 MSSQL)的情况下防止 SQL 注入