我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列?
我不能很好地算出算法成本,所以我在这里问。
这是一个初始使用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)?
我尝试将类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) 我知道我们应该更倾向于在头文件中声明所有内容,如果可能的话,那么STL呢?
我发现iostream有iosfwd.
如果我想在我的班级中声明一个互斥锁,如下所示:
class MyClass
{
.....
private:
std::mutex mMutex;
};
Run Code Online (Sandbox Code Playgroud)
我应该在我的类标题中包含互斥标头吗?或者有没有办法向前推进它,例如:
class std::mutex;
class MyClass{...};
Run Code Online (Sandbox Code Playgroud)
对于计时器和线程也是如此.
对此的任何想法都是适用的.谢谢!
它被问过很多次,但不是这样的.
我在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.
有人有任何想法吗?
我有一个varchar列,每个字段包含一个单词,但在单词前后有随机数字的管道字符.
像这样的东西:
MyVarcharColumn
'|||Apple|||||'
'|||||Pear|||||'
'||Leaf|'
Run Code Online (Sandbox Code Playgroud)
当我查询表时,我希望将多个管道替换为单个管道,因此结果如下:
MyVarcharColumn
'|Apple|'
'|Pear|'
'|Leaf|'
Run Code Online (Sandbox Code Playgroud)
无法弄清楚如何使用REPLACE函数解决它,有谁知道?
我有一个自定义类的向量(例如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) 我有可以满足我需要的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,'&','&'),',', '</e><e>') + '</e></f>') as xm
Run Code Online (Sandbox Code Playgroud)
但是有几十个特殊的 XML 字符我需要在转换时转义,而且我不能真正在其中嵌套几十个 Replace (replace(replace(...函数)。这就是我所做的,而且很混乱。
如何修改上面的代码以转义 XML 敏感字符并产生相同的结果?
谢谢!
使用数据初始化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,但我并不完全熟悉这种语言,也许有更好的标准方法来完成这样的任务.
我正在查看供应商页面,无论 Azure SQL Server 是否支持 XML 列数据类型,都会看到矛盾的信息(每页顶部带有绿色或灰色复选框)。
任何有权访问 Azure SQL Server 数据库的人都可以告诉我 XML 是否得到完全支持吗?
https://learn.microsoft.com/en-us/sql/t-sql/xml/xml-transact-sql?view=sql-server-2017