小编Avi*_*hol的帖子

将存储为VARCHAR的BINARY转换为BINARY

INSERT SELECT从表(源)做一个每列都是VARCHAR数据类型的表.

其中一列存储二进制数据,如

'0003f80075177fe6'
Run Code Online (Sandbox Code Playgroud)

我插入此目标表的目标表具有相同的列,但具有适当的数据类型BINARY(16).

INSERT INTO destination
(
    column1,        --type of BINARY(16)
    ...
)
SELECT
    CONVERT(BINARY(16),[varchar_column_storing_binary_data]),   --'0003f80075177fe6'
FROM source
GO
Run Code Online (Sandbox Code Playgroud)

当我插入它,然后选择目标表时,我从BINARY16列中获得了不同的值:

0x30303033663830303735313737666536
Run Code Online (Sandbox Code Playgroud)

它看起来并不像是同一个值.

什么应该是转变作为二进制数据存储的正确方法VARCHAR,以BINARY列?

sql t-sql sql-server sql-server-2008

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

具有反向成本和pop / push_back成本的STL向量

我不能很好地算出算法成本,所以我在这里问。

这是一个初始使用1000个元素初始化的向量:

vector<unsigned int> mFreeIndexes(1000);
Run Code Online (Sandbox Code Playgroud)

我将持续将pop_back / push_back元素添加到向量中,但绝不会将push_back超过1000个(因此绝不要强迫向量重新分配)。

在这种情况下,pop_back / push_back操作是O(1)还是O(n)?

c++ stl

5
推荐指数
1
解决办法
552
查看次数

emplace_back调用移动构造函数和析构函数

我尝试将类cBar的两个实例置于具有emplace_back函数的向量中.

根据引用调用,emplace_back仅保留向量中的位置,然后"就地"创建新实例.

现在,我试着尝试一下:

#include <vector>
#include <iostream>
#include <memory>
#include <string>


class cBar
{
public:

    cBar(const int index);
    cBar(cBar&& other); //needed for emplace_back?
    ~cBar();

private:
    cBar(const cBar& other) = delete;
    cBar& operator=(const cBar& other) = delete;

public:
    int                         mIndex;

};




cBar::cBar(const int index) : mIndex(index)
{
    std::cout << "cBar being created ..." << std::endl;
}
cBar::cBar(cBar&& other) : mIndex(other.mIndex)
{
    std::cout << "cBar being moved ..." << std::endl;
}
cBar::~cBar()
{
    std::cout << "cBar being destroyed ..." << …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector c++11 visual-studio-2015

4
推荐指数
1
解决办法
863
查看次数

c ++ 11 forwarddeclare thread,mutex,chrono

我知道我们应该更倾向于在头文件中声明所有内容,如果可能的话,那么STL呢?

我发现iostreamiosfwd.

如果我想在我的班级中声明一个互斥锁,如下所示:

class MyClass
{

.....
private:
    std::mutex mMutex;
};    
Run Code Online (Sandbox Code Playgroud)

我应该在我的类标题中包含互斥标头吗?或者有没有办法向前推进它,例如:

class std::mutex;
class MyClass{...};
Run Code Online (Sandbox Code Playgroud)

对于计时器线程也是如此.

对此的任何想法都是适用的.谢谢!

stl forward-declaration c++11

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

在SQL Server 2008中模仿没有自定义函数的STRING_SPLIT

它被问过很多次,但不是这样的.

我在SQL Server 2008上,没有STRING_SPLIT功能(如2016年).

查询返回以下行,请参见下面的单个示例行.你在下面看到的bald实际上是一个单独的字段,所以一varchar列完全有它:

Appple|10|admin|845687|Apr|26|11:32:29|2016|AwesomeApplication.zip
Run Code Online (Sandbox Code Playgroud)

我希望被管道|角色分开.

我无法为此编写CTE或自定义函数.

我必须使用内置的字符串函数(例如CHARINDEX,)在一个select语句中将各个管道分隔元素提取到不同的列中PATINDEX.

有人有任何想法吗?

sql t-sql sql-server sql-server-2008

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

将多个重复字符替换为一个

我有一个varchar列,每个字段包含一个单词,但在单词前后有随机数字的管道字符.

像这样的东西:

MyVarcharColumn
'|||Apple|||||'
'|||||Pear|||||'
'||Leaf|'
Run Code Online (Sandbox Code Playgroud)

当我查询表时,我希望将多个管道替换为单个管道,因此结果如下:

MyVarcharColumn
'|Apple|'
'|Pear|'
'|Leaf|'
Run Code Online (Sandbox Code Playgroud)

无法弄清楚如何使用REPLACE函数解决它,有谁知道?

sql t-sql sql-server-2008

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

使用unique_ptr缓存局部性

我有一个自定义类的向量(例如std :: string).

向量很大,我经常迭代,所以我依赖缓存局部性.

我还有一个指向其中一个向量元素的原始指针.

现在就是诀窍:

向量是不时排序的,因此原始指针会松散实际的指向元素值,并指向一些随机元素值.

这是一个说明相同的例子:

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <memory>

using namespace std;

int main()
{

    vector<string> v = {"9","3", "8", "7", "6", "5", "1", "4", "2"};

    string* rs = &v[7]; //point to the 7th element

    for (size_t i = 0; i < v.size(); ++i)
        cerr << v[i];
    cerr << endl;
    cerr << "Referenced string: " << rs->c_str() << endl;

    cerr << "Sort ..." << endl;
    sort(v.begin(), v.end(), [](const string& a, const …
Run Code Online (Sandbox Code Playgroud)

c++ caching pointers vector c++11

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

转换时转义 XML 特殊字符

我有可以满足我需要的csv分割器。

您可以按原样获取并运行它:

declare @t table(data varchar(max))
insert into @t select 'a,b,c,d'
insert into @t select 'e,,,h'

;with cte(xm) as 
(
    select convert(xml,'<f><e>' + replace(data,',', '</e><e>') + '</e></f>') as xm 
    from @t
)
select
    xm.value('/f[1]/e[1]','varchar(32)'),
    xm.value('/f[1]/e[2]','varchar(32)'),
    xm.value('/f[1]/e[3]','varchar(32)'),
    xm.value('/f[1]/e[4]','varchar(32)')
from cte
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,如果我在data中引入 XML 敏感字符,例如&

insert into @t select 'i,j,&,k'
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:字符 24,非法字符

一种解决方案是将&字符即时替换为& ,如下所示:

select convert(xml,'<f><e>' + replace(replace(data,'&','&amp'),',', '</e><e>') + '</e></f>') as xm 
Run Code Online (Sandbox Code Playgroud)

但是有几十个特殊的 XML 字符我需要在转换时转义,而且我不能真正在其中嵌套几十个 Replace (replace(replace(...函数)。这就是我所做的,而且很混乱。

如何修改上面的代码以转义 XML 敏感字符并产生相同的结果?

谢谢!

xml sql t-sql csv sql-server-2014

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

使用大型数据集初始化类成员向量的最有效方法

使用数据初始化std::vector类中的成员变量的最快/内存有效方法是什么?

这是我能够提出的:

class LargeClass
{
//lot of data, with long running constructor to initialize them 
}

class EngineClass
{

public:
EngineClass( const vector<LargeClass>& vectorOfLargeClass )
{
mVectorOfLargeClass = vectorOfLargeClass; //Here is what I was able to come up
}

private:
vector<LargeClass> mVectorOfLargeClass;

}

int main()
{
vector<LargeClass> vectorOfLargeClass;
...
//fill vectorOfLargeClass with a lot of data
...
EngineClass engine( vectorOfLargeClass );
...
}
Run Code Online (Sandbox Code Playgroud)

我需要EngineClass保存vectorOfLargeClass在中创建的矢量数据的副本main().

我使用C++ 11,但我并不完全熟悉这种语言,也许有更好的标准方法来完成这样的任务.

c++ c++11

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

Azure XML 支持

我正在查看供应商页面,无论 Azure SQL Server 是否支持 XML 列数据类型,都会看到矛盾的信息(每页顶部带有绿色或灰色复选框)。

任何有权访问 Azure SQL Server 数据库的人都可以告诉我 XML 是否得到完全支持吗?

https://learn.microsoft.com/en-us/sql/connect/oledb/features/using-xml-data-types?view=sql-server-2017

https://learn.microsoft.com/en-us/sql/relational-databases/xml/xml-data-type-and-columns-sql-server?view=sql-server-2017

https://learn.microsoft.com/en-us/sql/t-sql/xml/xml-transact-sql?view=sql-server-2017

xml sql-server azure azure-sql-database

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