正如标题所述,我正在尝试制作一个小函数来获取数据库中已有的日期值并将其显示为YYYY-MMM(例如:2013年11月).SQL Server.我试过DatePart,但它一次只需要一部分争论(不能做YYYY-MMM).有任何建议将其作为一项功能吗?
Create function fnYearMonth
(@InputDate date)
returns date
Begin
Return DatePart(YYYY-MMM, @inputdate)
End;
Select hiredate, dbo.fnYearMonth(hiredate) as ReviewDate
from employees
Order by ReviewDate
Run Code Online (Sandbox Code Playgroud) sql sql-server scalar user-defined-functions date-formatting
我正在尝试从表中读取数据。这个表有一个表名列表。
对于数据集的每一行,我想运行几个查询来提取数据并将其插入到临时表中。
这是我所做的
DECLARE @campName varchar(255);
DECLARE @sqlCommand varchar(1000);
DECLARE @sqlCommandMySQL varchar(1000);
DECLARE @LastRun varchar(60);
DECLARE @OPENQUERY varchar(1000);
DECLARE MY_CURSOR CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
SELECT LTRIM(RTRIM(CallListName)) AS CallListName
FROM [SMSQL1].[RDI_System].[dbo].[Campaigns]
WHERE dialer_campaign = 1 AND i3Server ='I3New' AND ClientID = 111 AND (EndDate IS NULL OR EndDate >= getdate() - 7)
OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @campName
WHILE @@FETCH_STATUS = 0
BEGIN
--SET @LinkedServer = 'GUARDIAN';
SET @OPENQUERY = 'SELECT @LastRun = lr FROM OPENQUERY(GUARDIAN,''';
SET …Run Code Online (Sandbox Code Playgroud) 我必须执行将作为标量和数组工作的函数。例如:
@t = testfunc(1, 2, 3, 4);
$x = testfunc(1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)
有人知道我该怎么做吗?如果是 $x,则必须打印“标量”;如果是 @t,则必须打印“数组”。我尝试做这样的事情:
sub testfunc()
{
print "test";
}
Run Code Online (Sandbox Code Playgroud)
但即使这样也行不通:/
我需要在存储过程下面的枢轴中输入一个参数。但它指出,“必须声明标量变量“@pWeek”。”
我尝试以各种方式声明它,但我无法弄清楚这一点。这个编码的其他一切都很好,因为我以我想要的方式得到了我想要的数字。我只需要能够将其放入 SSRS 中并能够输入参数。谢谢。
GO
/****** Object: StoredProcedure [dbo].[QB_ACCOUNT_SUMMARY] Script Date: 6/19/2015 12:42:12 PM ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[QB_ACCOUNT_SUMMARY]
@pWeek int
as
SET NOCOUNT ON
declare @AccountRef_Fullname AS NVARCHAR(MAX)
select @AccountRef_Fullname = COALESCE(@AccountRef_Fullname + ',', '') + '['+ AccountRef_Fullname + ']'
from
(
select distinct Accountref_fullname
from (select accountref_fullname from journalcreditlinedetail)JournalCreditLine
union
(select accountref_fullname from journaldebitlinedetail)
union
(select accountref_fullname from txnexpenselinedetail)
union
(select accountref_fullname from depositlinedetail)
union
(select discountaccountref_fullname from [appliedtotxndetail])
) pAccountRef_Full_Name …Run Code Online (Sandbox Code Playgroud) 谁能告诉我为什么这个打印REF(*)而不是0?
$a = 0;
$a = \$a;
print $$a . "\n";
Run Code Online (Sandbox Code Playgroud) sub get_list {
return ("one", "two");
}
sub get_array {
my @a = ("one", "two");
# need to convert @a to list
return @a;
}
my $two = get_list(); # desired, assigns last item in list to scalar
my $count = get_array(); # evaluates array in scalar context, returning a count
Run Code Online (Sandbox Code Playgroud)
在get_array()方法中,我已经创建了一个数组,但我希望将其作为列表返回,以便根据列表规则而不是数组规则进行分配.当然,数组通常以更复杂的方式构建(不是直接从列表中构建).
我已经尝试过使用map,希望它会返回一个值列表,但这会给出相同的结果.与拆分/加入相同.
return map { $_ } @a;
return split /,/, join(",", @a);
Run Code Online (Sandbox Code Playgroud)
如何将数组转换为值列表?
这可能很奇怪,因为据我了解,向量和标量不能相加。但是我发现了这个示例,并在第 157 行中执行了以下操作:
hsv.x + vec3(0.,2./3.,1./3.)
Run Code Online (Sandbox Code Playgroud)
其中hsv.x恰好是一个float数字,该值来自鼠标 X 坐标,其余的是vec3.
我的问题是该操作的结果是什么?
我在 SAS 中这样做,但是原则应该适用于 sqlserver。我有一个表格,它是帐号完全连接的结果,所以它看起来像这样:
abc_accno xyz_accno
11111 .
22222 22222
. 66666
33333 33333
44444 44444
. 55555
Run Code Online (Sandbox Code Playgroud)
我的最终目标是有一个看起来像这样的表:
count_abc_accno count_xyz_accno matched_pairs
4 5 3
Run Code Online (Sandbox Code Playgroud)
所以我的查询是这样的:
create table matched_pairs as
select
count(abc_accno) as Count_abc_AccNo
,count(xyz_accno) as Count_xyz_AccNo
,(select count(abc_accno) as matched_pairs
from t1
where abc_accno = xyz_accno)
from t1
;
Run Code Online (Sandbox Code Playgroud)
我最终得到的是这样的:
count_abc_accno count_xyz_accno _randomname
4 5 3
Run Code Online (Sandbox Code Playgroud)
我认为可能有一种更优雅的方法来做到这一点,但我们使用我们拥有的工具(和知识)。我希望匹配对变量表示匹配对,但我无法弄清楚如何从系统生成的名称中删除它。
这样做的最佳方法是什么?有没有比我正在尝试的更优雅的解决方案?(似乎总有……总有一天)
我理解下面这段代码的一般目标(即总结字符串的数字部分,例如对于 currstr="3S47M" 然后 seqlength=50)。
但是有人可以逐行解释我发生了什么吗?
特别是,我很难理解where每回合持有什么价值。更准确地说,我不明白scalar函数的部分("scalar($RLENGTH = length($&), $RSTART = length($`)+1)") ?
里面的赋值RLENGTH和RSTART发生是否正确scalar?
为什么在 内使用逗号分隔的赋值scalar?这是什么意思 ?那么它的评估结果是什么?
如果有人可以提供帮助,我将非常感激!
谢谢
埃丽卡
my $seqlength=0;
my $currstr="3S47M";
my $where = $currstr =~ /[0-9]+[M|D|N|X|=|S|H|N]/
? scalar($RLENGTH = length($&), $RSTART = length($`)+1) : 0;
while ($where > 0) {
$seqlength += substr($currstr, ($where)-1, $RLENGTH - 1) + 0;
$currstr = substr($currstr, ($where + $RLENGTH)-1);
$where = $currstr =~ /[0-9]+[M|D|N|X|=|S|H|N]/
? scalar($RLENGTH = length($&), $RSTART …Run Code Online (Sandbox Code Playgroud) 我在一个数组中有一堆哈希。检查我的键和值时,我得到了预期的输出,除了一些特殊情况,因为它们引用了更多的数组/哈希。
想想这样的事情:
@AoH = ( { 'husband' => "homer", 'wife' => "marge" },
{ 'people' => [{'Bob'=> 24, 'Lukas'=> 37}] },
{ 'vegetables' => { 'tomato' => "red", 'carrot' => "orange"} });
Run Code Online (Sandbox Code Playgroud)
我的函数遍历数组并显示我的键和值,如下所示:
sub function(...){
print "$key => $value\n";
}
husband => homer
wife => marge
people => ARRAY(0x6b0d80)
Bob => 24
Lukas => 37
vegetables => HASH(0x2570d38)
tomato => red
carrot => orange
Run Code Online (Sandbox Code Playgroud)
现在我想访问我的键和值,但是当将诸如 ARRAY 或 HASH 之类的东西作为值时,我想忽略该散列而不是打印它。
是否有某种方法只能访问类型标量的值?
到目前为止,我试过这个:
if ($value eq 'ARRAY') {
}
elsif ($value eq …Run Code Online (Sandbox Code Playgroud)